2014-12-04 4 views
2

Я делаю что-то немного отличное от того, что я видел, многие люди это сделали, поэтому выпадающий список является частью дочернего списка. Однако я пытаюсь работать с выпадающим меню для сестер.Выпадающее меню JQuery hover исчезает при наведении указателя мыши на выпадающее меню

Вот моя скрипка: http://jsfiddle.net/58m99wf8/

Что вы заметите, что при наведении на кнопку, появится выпадающее меню. Если вы оставите кнопку, она исчезнет, ​​что идеально. Однако, если вы наводите курсор на раскрывающееся меню, оно все еще исчезает, и это не то, что я хочу, чтобы он это делал.

Как я могу предотвратить это?

Я видел, как это работает так:

if($('#menuONE').has(e.target).length === 0) { 
     // toggle menu to close 
    } 

Однако я не понимаю, как я могу прикрепить это к подменю, а также кнопки.

ответ

1

Попробуйте

var isSiblingHovered = false; 
$('.dropdown-hover-toggle').hover(function() { 
    $(this).siblings('.dropdown-menu').slideDown(); 
}, 
function() { 
    var current = $(this); 
    setTimeout(function(){ 
     if(!isSiblingHovered){ 
      current.siblings('.dropdown-menu').stop().slideUp(); 
     } 
    }, 50); 
}); 

$('body').on("mouseleave", ".dropdown-menu", function() { 
    isSiblingHovered = false; 
    $('.dropdown-menu').stop().slideUp(); 
}); 

$('body').on("mouseenter", ".dropdown-menu", function() { 
    isSiblingHovered = true; 
}); 

EXAMPLE

+0

Что делать, если вы наводите курсор на кнопку, а не на меню, тогда меню остается открытым до тех пор, пока вы не наведете курсор в меню и не уйдете. это не работает. – mdixon18

+0

Работает на скрипке, у меня есть в моем проекте ту же версию JQuery, но я получаю эту проблему: Неиспользуемая ошибка: ошибка синтаксиса, непризнанное выражение: неподдерживаемый псевдо: hover – mdixon18

+0

Приятно, но мы можем улучшить его, чтобы работать с несколькими, попробуйте переключиться между этими двумя: http://jsfiddle.net/58m99wf8/6/ – mdixon18

0

Что вы можете сделать, это добавить меню в селектор. Я также определил меню, потому что теперь это может означать кнопку или меню, поэтому переход оттуда может быть проблематичным.

var menu = $('.dropdown-menu'); 

$('.dropdown-hover-toggle, .dropdown-menu').hover(

function() { 
    //show its sibling menu 
    menu.stop().slideDown(); 
}, 

function() { 
    //hide its sibling menu 
    menu.stop().slideUp(); 
}); 

http://jsfiddle.net/58m99wf8/1/

+0

и если у вас есть несколько меню, это будет ужасный подход. Есть ли способ нацеливать $ (this) на функцию зависания, но только указывая этот экземпляр .dropdown-menu? – mdixon18

Смежные вопросы