jQuery - 单击菜单项时停止折叠式菜单关闭

标签 jquery

单击子菜单链接时如何阻止 Accordion 菜单 ul.sub-menu 关闭?

当单击父项时, Accordion 会打开,但当单击其下一级的子菜单项时,它会再次关闭。

这是我的 HTML:

<ul class="menu">
  <li><a href="#">parent 1</a>
        <ul class="sub-menu">
            <li><a href="#">1st child item</a></li>
        </ul>
  </li>
    <li><a href="#">parent 2</a>
    <ul class="sub-menu current-menu-parent">
        <li><a href="#">2nd child item</a></li>
        <li class="current-menu-item"><a href="#">3rd child item</a></li>
    </ul>
  </li>
  <li><a href="#">parent 3</a>
        <ul class="sub-menu">
            <li><a href="#">4th child item</a></li>
        </ul>
  </li>    
</ul>​​​​​​​​

这是我的 jquery:

jQuery(function($) {
    $(".menu > li").children("a").attr('href', 'javascript:void(0)');
    $('.sub-menu').hide();  
    $('.current-menu-parent').show();    
    $('.menu > li').click(function() {
        $(this).find('ul').slideToggle('slow');
    });
});​

最佳答案

为您准备的 Accordion ,

HTML:

<ul class="menu">
  <li><a href="javascript:void(0)">parent 1</a>
        <ul class="sub-menu">
            <li><a href="#">1st child item</a></li>
        </ul>
  </li>
    <li><a href="javascript:void(0)">parent 2</a>
    <ul class="sub-menu current-menu-item">
        <li><a href="#">2nd child item</a></li>
        <li><a href="#">3rd child item</a></li>
    </ul>
  </li>
  <li><a href="javascript:void(0)">parent 3</a>
        <ul class="sub-menu">
            <li><a href="#">4th child item</a></li>
        </ul>
  </li>    
</ul>​​​​​​​​

CSS:

<style>
.sub-menu{
    display:none;
}
.current-menu-item{
    display:block;
}
</style>

JS:

rel = 0;


$('.sub-menu').hover(function(){ // findind mouse postion
        rel = 1; // if mouse on submenu
    }, function(){ 
        rel = 0;  if mouse out submanu
});
$('.menu > li').live("click",function(){


        if(!$(this).hasClass("active")){ // if not already opened
            $('.sub-menu').slideUp();    // hide all other submenu
            $('.sub-menu',this).slideDown();  // show which your clicked
            $(".menu > li").remove('active');  //  remove all active class in li
            $(this).addClass('active'); //adding active class which your clicked li
        }
        else{
            if(rel==0){
                $('.sub-menu').slideUp(); // if clicked already opend parent that will close
                $(this).removeClass('active'); // remove all active class
            }
            else{

            }
        }
});

关于jQuery - 单击菜单项时停止折叠式菜单关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606666/

相关文章:

javascript - 动态选项卡的奇怪行为

Javascript 将 ID 添加到字符串内的元素

jquery - 编写此脚本的更漂亮的方式(点击时隐藏跨度,显示输入)

javascript - 如何从输入 JQuery 或 javascript 获取修改后的文本

javascript - CLASS 中的自定义事件

javascript - 获取循环中的两个值、复选框和变量。只抓取复选框? php 并带有屏幕截图

Javascript:for 与 jQuery.each() 带时间延迟

javascript - 使用 jQuery 从数据库访问对象

javascript - 在 $.ajax 成功后执行一个函数,而不是直接将其放入回调中

javascript - 表行上的 jQuery 可排序无法移动