我只是在用户点击.menu_branch
时尝试使用jQuery slideUp()
隐藏.menu_root
。我没有收到任何错误,但即使单击click()
,.menu_root
函数也在执行。有任何想法吗? jQuery或直接的JavaScript都很好。谢谢!
HTML:
<span class="menu_root">Menu</span>
<ul class="menu_branch">
<li><a href="#">Home</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
CSS:
.menu_branch {
display:block;
}
Jquery的:
$("body:not(.menu_root)").click(function(){
$(".menu_branch").slideUp("fast");
});
我也试过了:
$("body").not(".menu_root").click(function(){
$(".menu_branch").slideUp("fast");
});
除了在两个实例中都将body
替换为*
,所有结果都相同。
答案 0 :(得分:3)
一种可能的解决方案是阻止来自menu_root
$(document).click(function () {
$(".menu_branch").slideUp("fast");
});
$('.menu_root').click(function (e) {
e.stopPropagation();
})
演示:Fiddle
您的代码会忽略body
个menu_root
元素,如<body class="menu_root">
答案 1 :(得分:1)
你可以试试这个:
$("body").click(function(event){
if ( $(event.target).hasClass("menu_root") ) {
return false;
}
$(".menu_branch").slideUp("fast");
});
答案 2 :(得分:1)
再来一次晚会,但这对你有用。点击.menu_root
将切换菜单。单击其他任何地方将关闭它(如果它打开)。
$(document).on("click", function(e) {//When the user click on any element:
if($(".menu_branch").is(":visible")){//If the menu is open...
$(".menu_branch").slideUp("fast");//close it.
} else if ($(e.target).hasClass("menu_root")){//Otherwise, if the user clicked menu_root...
$(".menu_branch").slideDown("fast");//open it.
}
});
答案 3 :(得分:0)
试
$(document).click(function () {
$(".menu_branch").slideUp("fast");
});
$('.menu_root').click(function () {
return false;
})