2

我想为单击的每个列表元素构建一个简单的菜单,但是一旦您在其外部单击,就会隐藏此 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 链接显示的,然后正文单击会立即将其隐藏。我怎样才能避免这种情况。

如果您能提供建议,谢谢

4

2 回答 2

9

您可以使用stopPropagation()阻止 click 事件从 .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();
});
于 2010-05-02T15:28:28.547 回答
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 '); 
});
于 2012-12-20T14:08:58.620 回答