2013-09-10 5 views
1

У меня есть раскрывающееся меню, которое отображается при наведении. Меню скрывается снова после того, как мышь от него, и я не могу щелкнуть ни на одном из подменю.Прекратить закрытие выпадающего меню на Hover

$('.toggle-menu').on('hover',function(e){ 
     e.preventDefault(); 
     $(this).parent().siblings().children('.toggle-menu').removeClass('show').next().slideUp(); 
     $(this).toggleClass('show').next().slideToggle(); 
     e.stopPropagation(); 
}); 

Как я могу остановить закрытие выпадающего меню, если мышь наводится на раскрывающийся контейнер?

My jsFiddle Example

Любая помощь очень ценится! Спасибо огромное!

ответ

2

Решение Mouseover имеет небольшую проблему, если вы попали в меню слишком быстро, когда он втягивается.

Используйте литий в качестве родителя:

$('.toggle-menu-parent').on('hover', function(e){  
     e.preventDefault(); 

     $(this).siblings().children('.toggle-menu').removeClass('active').next().slideUp(); 

     $(this).find('.toggle-menu').toggleClass('active').next().slideToggle(); 

    e.stopPropagation(); 
}); 

http://jsfiddle.net/3uLxb/16/

+0

Это, как, мой ответ: D –

+1

+1 для вас ........... –

+0

Извините, Иван просто видел, что мы сделали это очень симулятивно, но вы были первыми! – chrisarton

4

использование Mouseover вместо парения

изменение

$('.toggle-menu').on('hover',function(e){ 

в

$('.toggle-menu').on('mouseover',function(e){ 
+0

Я имел ту же идею. Может понадобиться «щелчок», чтобы закрыть или скрыть? – McPhelpsius

+2

вот решение мыши/мышиное решение http://jsfiddle.net/3uLxb/14/ –

+0

Большое вам спасибо Joao! –

1

использование Mouseover и MouseOut событие справиться с этим.

$('.toggle-menu').on('mouseover',function(e){... 

проверить это http://jsfiddle.net/nkNUz/ использование MouseOut событие, чтобы скрыть согласно вашей логике

1

На самом деле, что вы должны сделать, это инкапсулировать <li> с в дивы с overflow:hidden и вашим height набор, который только «Меню» показ позиции.

На hover вы должны animate ваш height вниз, чтобы показать все <li> с. Вам не нужно будет mouseover или mouseout отдельно, если вы выбрали <div> в качестве элемента jQuery.

2

JS

$('.toggle').on('hover',function(e){ 
     e.preventDefault(); 
     $(this).siblings().children('.toggle-menu').removeClass('active').next().slideUp(); 
     $(this).find('.toggle-menu').toggleClass('active').next().slideToggle(); 
     e.stopPropagation(); 
}); 

HTML

<ul class="nav"> 
    <li class="toggle"> 
     <a href="#" class="toggle-menu"><span></span>MENU 1</a> 
     <ul class="menu1"> 
      <li><a href="#">Item 1</a></li> 
      <li><a href="#">Item 2</a></li> 
      <li><a href="#">Item 3</a></li> 
     </ul> 
    </li> 
    <li class="toggle"> 
     <a href="#" class="toggle-menu"><span></span>MENU 2</a> 
     <ul class="menu2"> 
      <li><a href="">Item 1</a></li> 
      <li><a href="">Item 2</a></li> 
     </ul> 
    </li> 
</ul> 

http://jsfiddle.net/3uLxb/15/

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