javascript - jQuery .not() 无法正常工作

标签 javascript jquery html css

我环顾四周并研究了为什么这不起作用,但我似乎处于一种不同的情况。

我有一个导航项的默认操作,用于处理悬停时的导航动画:

$('.logoCont').hover(function(){
    someFunction()...
}, function (){
    someFunctionReverse()...
});

现在,当谈到在移动屏幕上时,我会隐藏导航并在那里放置一个按钮。然后按钮控制菜单从侧面滑出的动画。我添加了一行代码,用于在单击此按钮时向导航元素添加一个类。

$('.mobile-menuButton').click(function(){ //When you click the menu-show button
    if($(this).hasClass('menuClosed')){ //Check to see if the menu is closed
        $('.nav_hover').addClass('mobile_open'); //Add the mobile_open class to the navigation items
    } else {
        $('.nav_hover').removeClass('mobile_open'); //remove it
    }
});

然后我将第一个悬停函数更改为:

$('.nav_hover').not('.mobile_open').hover(function(){
    someFunction()...
}, function (){
    someFunctionReverse()...
});

我希望这会阻止 someFunction() 在移动菜单出现时发生。

你可以查看我在做什么HERE - 当您将屏幕缩小到 540px 以下时,媒体查询将生效,您可以单击菜单按钮。

关于 .not() 的文档 HERE .本页末尾的第二个示例正是我所希望的。

最佳答案

该类稍后添加,事件处理程序附加到在页面加载时(或每当执行时)与选择器匹配的任何和所有元素,并不真正关心您稍后添加的内容。
您必须检查事件处理程序中的类

$('.nav_hover').hover(function(){
    if ( !$(this).hasClass('mobile_open') ) {
        someFunction()...
    }
}, function (){
    if ( !$(this).hasClass('mobile_open') ) {
        someFunctionReverse()...
    }
});

委托(delegate)也可以工作,但它不会真正与 not()hover()

一起工作
$(document).on({
    mouseenter: function() {
        someFunction()...
    },
    mouseleave: function() {
        someFunctionReverse()...
    }
}, '.nav_hover:not(.mobile_open)');

关于javascript - jQuery .not() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292027/

相关文章:

javascript - 引导效果平滑 anchor 滚动?

javascript - Bootstrap slider 有 3 个或更多 handle 吗?

javascript - 根据选择,我怎样才能移动到 vue js html 中的另一个页面?

c# - 如何使用 C# 从 html 页面中抓取文本?

javascript - 如何检查iframe是否加载完成

javascript - 将多个 ng-options 输入一起重置为默认值

javascript - 我们如何将日期选择器初始化为由ajax附加的文本框

javascript - jQuery next().addClass() 和 prev().addClass() 问题

jquery - 引用网格上的 Kendo UI (ASP.NET MVC) 下拉列表

php - 在 php 循环中写入 javascript 数组