показать / скрыть выпадающее меню при наведении курсора мыши при помощи jquery - PullRequest
10 голосов
/ 13 июня 2009

, поэтому у меня есть простая навигационная панель с выпадающим меню, когда пользователь наводит курсор на вкладке «Больше». я хочу скрыть выпадающее меню, когда пользователь выводит из категории разделение.

проблема заключается в том, что когда пользователь вводит ульи, раскрывающийся список закрывается. как я могу установить его так, чтобы функция игнорировала ul li внутри категорий div. попробовал категории> * но не сработало.

<div id="navbar">
  <ul>
    <li>tab1</li>
    <li>tab2</li>
    <li id="moretab">more</li>
  </ul>
</div> 
<div id="categories">
  <ul>
    <li>cats</li>
    <li>dogs</li>
  </ul>
</div>

$("#moretab").hover(function(){
  $("#categories").css("visibility","visible"); 
});
$("#categories").mouseout(function() {
    $("#categories").css("visibility","hidden"); 
});

Ответы [ 5 ]

16 голосов
/ 13 июня 2009
$(document).ready(function () {

  $("#moretab").mouseenter(function(){
    $("#categories").show(); 
  });

  $("#categories, #moretab").mouseleave(function(){
    $("#categories").hide(); 
  });
});
15 голосов
/ 13 июня 2009

Самый простой ответ - как сделать это без jQuery: поместите раскрывающийся список в элемент запуска (например, раскрывающийся список в элемент списка в списке навигации).

Если вы хотите что-то менее простое, mouseleave может помочь.

3 голосов
/ 30 декабря 2014

Плагин Jquery hover включает в себя как mouseenter, так и mouseleave, и следующий код прекрасно работает для меня.

JavaScript:

$(document).ready(function(){
    $('.dropdown').hover(
    function(){
        $(this).children('.sub-menu').slideDown('fast');
    },
    function () {
        $(this).children('.sub-menu').slideUp('fast');
    });
});
2 голосов
/ 26 июля 2012

Мало вещей:

  • поместите div внутри "#moretab", чтобы переход из меню обратно к "more" не закрывал его.
  • добавить задержку от отпускания мыши, что является предпочтительным опытом пользователя

    <div id="navbar">
        <ul>
            <li>tab1</li>
            <li>tab2</li>
            <li id="moretab">more
                <div id="categories">
                    <ul>
                        <li>cats</li>
                        <li>dogs</li>
                    </ul>
                </div>
            </li>
        </ul>
    </div>
    
    <script type="text/javascript">
    $(document).ready(function(){
    
    $("#moretab").hover(function(){
        $("#categories").slideDown("fast");
        clearTimeout(debounce);
    });
    
    $("#moretab").mouseleave (function() {
        debounce = setTimeout(closeMenu,400);
    });
    
    var debounce;
    var closeMenu = function(){
        $("#categories").slideUp("fast");
        clearTimeout(debounce);
    }
    
    });
    </script>
    
2 голосов
/ 26 июля 2012

Это может помочь! Сначала спрячьте подменю.

//html

<ul>
 <li id = "menu"> <a  href ="#"> Settings </a>
   <ul id = "sub_menu">
   <li> <a  href ="#"> page 1</a></li>
   <li> <a  href ="#"> page 2</a></li>
   </ul>
 </li>
 <li>SomeLink</li>
 <li>SomeLink 2</li>
</ul>

//Javascript

        $("#menu").hover(function() {
            $("#sub_menu").show();
        }, function() {
            $("#sub_menu").hide();
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...