我想为点击的每个列表元素构建一个简单的菜单,但是一旦你点击它就隐藏了这个div。这是一些简单的代码,希望有意义。
$('.drillFolder').click(function(){
var id = $(this).attr('data-folder');
$(".drillDownFolder ul li > a").attr('data-id', id);
$(".drillDownFolder").show();
});
$("body").click(function(e){
if(e.target.className !== "drillDownFolder")
{
$(".drillDownFolder").hide();
}
});
//The hidden div
<div class="drillDownFolder" style="display:none">
<ul>
<li><a href="#" data-id="">Show Image</a></li>
<li><a href="#" data-id="">Edit Image</a></li>
</ul>
</div>
我知道什么是错的,因为菜单是通过.drillFolder链接显示的,然后是正文隐藏它。我怎么能避免这种情况。
谢谢你,如果你可以提供建议
答案 0 :(得分:9)
您可以使用stopPropagation()阻止点击事件传播出.drillFolder回调。
$('.drillFolder').click(function(event){
event.stopPropagation();
var id = $(this).attr('data-folder');
$(".drillDownFolder ul li > a").attr('data-id', id);
$(".drillDownFolder").show();
});
$("body").click(function(e){
$(".drillDownFolder").hide();
});
答案 1 :(得分:0)
isClicked = function($i, e){
return $i.length>0 && $(e.target).parents().andSelf().index($i)>-1 ;
}
$ i是jQuery对象,如$('#myDiv'),e是事件对象
$(document).click(function(e) {
if( !isClicked( $('#myDiv') , e ) ) alert('not myDiv ');
});