可折叠的jQuery下拉菜单 - 停止事件传播

时间:2014-04-07 17:01:01

标签: jquery wordpress drop-down-menu responsive-design

我一直在努力使Wordpress自定义主题响应。由于在多站点安装中使用它们的方式,我觉得最好的方法是将主菜单变成可折叠的小屏幕上的下拉菜单。 我是一个jQuery新手,但经过一些失败的尝试后,我设法编写自己的脚本,使用父/子控制可折叠菜单。 所以这是我的问题。当有一个没有子菜单的项目时,有一种方法可以让jQuery检测到没有子元素并允许点击链接而不是这样吗?
这是我的代码:

<a href="#navigation" class="mobile-nav-link">Navigation</a>
<nav id="access" class="menu" role="navigation">
<div id="nav-wrap-mobile">
<div id="nav-wrap-sub-mobile">
<div class="menu-main-menu-2-container">
<ul id="menu-main-menu-5" class="menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-37"><a href="http://link.to.thing">Parent 1</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1877"><a href="http://link.to.thing">Child 1</a>
</li>
</ul>
</li>
</ul>
<ul id="menu-main-menu-5" class="menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-38"><a href="http://link.to.thing">Parent 1</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1879"><a href="http://link.to.thing">Child 2</a>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1878"><a href="http://link.to.thing">Child 2</a>
</li>
</ul>
</li>
</ul>
<ul id="menu-main-menu-7" class="menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-37"><a href="http://link.to.thing">No Parent</a></li>
</ul>
</div>
</div>
    </div>
</nav>
<!-- #access- -->

这是jQuery

jQuery(document).ready(function() {
$('#nav-wrap-mobile').hide();
$('.mobile-nav-link').click(function() {
$('#nav-wrap-mobile').toggle();
});
jQuery(document).ready(function() {
$('ul.sub-menu').hide();
$('ul.menu').children().click(function(e) {
e.preventDefault();
$(this).children('ul.sub-menu').toggle();}).children('ul.sub-menu').click(function (event) { 
 event.stopPropagation();
    });
   });
  });

这是一个Jsfiddle,说明了我想说的话:

http://jsfiddle.net/nivims/S48ZV/15/

提前致谢:)

1 个答案:

答案 0 :(得分:0)

您可以检查是否有子列表,添加:

if ($(this).children('ul').length == 0) {
    return;
}

到右下方:

$('ul.menu').children().click(function (e) {