jQuery .not () не работает должным образом

0

Я осмотрелся и исследовал, почему это не работает, но кажется, что я в какой-то иной ситуации.

У меня есть действие по умолчанию для элемента навигации, который обрабатывает анимацию навигации при наведении:

$('.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() когда мобильное меню отключено.

Вы можете посмотреть, что я делаю ЗДЕСЬ. Когда вы уменьшаете экран до 540px, медиа-запрос вступает в силу, и вы можете нажать кнопку меню.

Документация на .not() ЗДЕСЬ. Второй пример в конце страницы - именно то, на что я надеялся.

  • 0
    $(".logoCont:not(.mobile_open)") это не должно быть $(".logoCont:not(.mobile_open)") ?
  • 0
    Я только что попробовал, и это не работает, а
Показать ещё 8 комментариев

1 ответ

1

Класс добавляется позже, а обработчик событий привязан ко всем элементам, которые соответствуют селектору в pageload (или всякий раз, когда он выполняется), и на самом деле не волнует то, что вы добавляете позже.
Вы должны проверить класс внутри обработчика события

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

делегация может также работать, но на самом деле это не будет работать с not() или hover()

$(document).on({
    mouseenter: function() {
        someFunction()...
    },
    mouseleave: function() {
        someFunctionReverse()...
    }
}, '.nav_hover:not(.mobile_open)');
  • 0
    Я пытаюсь это сейчас, хотя кажется, что это тоже не работает. Нужно ли делать .on() для щелчка по кнопке мобильного меню?
  • 0
    Упс, в ответ была опечатка, попробуйте сейчас!
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню