如何检测元素外部的单击,但该元素有子元素

时间:2013-07-31 03:32:59

标签: javascript jquery

我知道这个问题可能重复,因为我已经看到了这个解决方案:How do I detect a click outside an element?

如果我在元素外部单击,我想删除#main-element,但是该元素内部也有子元素。这意味着,如果我单击#main-element的子节点之一,#main-element就不应该关闭

<div id="main-element">
    <div class="test">1</div>
    <div class="test">2</div>
    <div class="test">3</div>
    <div class="test">4</div>
</div>

我尝试使用此解决方案:

$('html').click(function(e){
    if(e.target.id !== 'main-element') {
       $("#main-element").removeClass("open").hide();
    }
});

// For the trigger
$("#click-show").click(function(){
    if($("#main-element").hasClass("open"))
    {
       $("#main-element").removeClass("open").hide();
    }
    else{
       $("#main-element").addClass("open").show();
    }
});

3 个答案:

答案 0 :(得分:1)

这可能会有所帮助:

DEMO

使用最接近循环的父母和类来显示/隐藏你的元素;

$('html').on('click', function(){
  var mainElement = $('#main-element');
  if($(this).closest(mainElement).length){
      return;
  }
  mainElement.addClass('main-element-closed')
}) 

答案 1 :(得分:0)

$('*').click(function(){
if($(this).has('#main-element') || $(this).parent().has('#main-element')){
// it will open here
}else{
//put your hide code
}
});

答案 2 :(得分:0)

尝试使用jquery.click(document)来引用jquery的函数是HasClass('你的子元素类')