【发布时间】:2014-04-18 11:09:04
【问题描述】:
我正在开发一个下拉菜单,它在点击时显示下拉菜单,而不是在悬停时显示。这需要 js,而且它有点工作。
现在菜单显示/隐藏单击项目本身。它还隐藏所有在子菜单外单击时打开的子菜单。这两个都不错。
但是,有两个错误我无法优雅地解决:
- 子菜单在单击子列表项时隐藏,但应保持打开状态。
- 可以同时打开多个子菜单,但我希望在打开新子菜单时关闭所有其他子菜单。
codepen 在这里:http://codepen.io/dr-potato/pen/rLleC?editors=111
用 JS 创建这种菜单最简单、最优雅、最健壮的方法是什么?
HTML
<ul>
<li><a href="#">Home</a></li>
<li class="Navigation-listItem is-dropdown">
<a href="#">About</a>
<ul class="Navigation-list is-dropdown is-hidden">
<li>Johnny</li>
<li>Julie</li>
<li>Jamie</li>
</ul>
</li>
<li class="Navigation-listItem is-dropdown">
<a href="#">Contact</a>
<ul class="Navigation-list is-dropdown is-hidden">
<li>Johnny</li>
<li>Julie</li>
<li>Jamie</li>
</ul>
</li>
</ul>
CSS
.Navigation-list {
display: block;
}
.Navigation-list.is-hidden {
display: none;
}
JS
$(document).ready(function() {
$('.Navigation-listItem').click(function() {
$(this).children('.Navigation-list.is-dropdown').toggleClass('is-hidden');
});
});
/* Anything that gets to the document
will hide the dropdown */
$(document).click(function(){
$(".Navigation-list.is-dropdown").addClass('is-hidden');
});
/* Clicks within the dropdown won't make
it past the dropdown itself */
$(".Navigation-listItem.is-dropdown").click(function(e){
e.stopPropagation();
});
【问题讨论】:
标签: javascript jquery html css