我正在尝试使用jquery创建一个垂直下拉菜单,我无法弄清楚为什么会发生这种情况。
第一级子菜单工作正常,但第二级(子级)正在做一些奇怪的事情 - 它会向上滑动!
只需选中此项并点击2222子菜单:
https://jsfiddle.net/adam900/ba3d7bu0/9/
//jQuery
$(document).ready(function() {
$("#nav ul li").has("> .sub-nav").click(function() {
$(this).find("> .sub-nav").stop().slideToggle();
});
});
/*CSS*/
#nav ul {
display: inline-table;
padding-left: 0;
}
#nav li a {
display: block;
}
#nav .sub-nav {
display: none;
}
<!--HTML-->
<div id="nav">
<ul>
<li><a href="#">11111</a></li>
<li><a href="#">11111 ↓</a>
<ul class="sub-nav">
<li><a href="#">2222</a></li>
<li><a href="#">2222 ↓</a>
<ul class="sub-nav">
<li><a href="#">333333</a></li>
<li><a href="#">333333</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">11111</a></li>
</ul>
</div>
你能告诉我如何解决它吗?
答案 0 :(得分:0)
$(document).ready(function() {
$("#nav ul li").has("> .sub-nav").click(function(e) {
e.stopPropagation();
$(this).find("> .sub-nav").stop().slideToggle();
});
});
<强> Updated Fiddle 强>
答案 1 :(得分:0)
对于嵌套的li元素,执行两次click处理程序。使用
e.stopPropagation();
防止事件冒泡。
$(document).ready(function() {
$("#nav ul li").click(function(e) {
e.stopPropagation();
$(this).find("> .sub-nav").slideToggle();
});
});
&#13;
#nav ul {
display: inline-table;
padding-left: 0;
}
#nav li a {
display: block;
}
#nav .sub-nav {
display: none;
}
#nav > ul li a {
padding: 16px 20px 17px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="nav">
<ul>
<li><a href="#">11111</a>
</li>
<li><a href="#">11111 ↓</a>
<ul class="sub-nav">
<li><a href="#">2222</a>
</li>
<li><a href="#">2222 ↓</a>
<ul class="sub-nav">
<li><a href="#">333333</a>
</li>
<li><a href="#">333333</a>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">11111</a>
</li>
</ul>
</div>
&#13;