单击元素外部时的jQuery触发事件

时间:2010-07-23 01:46:51

标签: javascript jquery

$(document).click(function(evt) {
    var target = evt.currentTarget;
    var inside = $(".menuWraper");
    if (target != inside) {
        alert("bleep");
    }

});

我试图找出如何制作它,以便如果用户点击某个div(menuWraper)之外,它会触发一个事件..我意识到我可以让每次点击触发一个事件,然后检查是否clicked currentTarget与从$(“。menuWraper”)中选择的对象相同。但是,这不起作用,currentTarget是HTML对象(?)而$(“。menuWraper”)是Object对象?我很困惑。

12 个答案:

答案 0 :(得分:65)

让您的menuWraper元素调用event.stopPropagation(),使其点击事件不会冒出document

试一试: http://jsfiddle.net/Py7Mu/

$(document).click(function() {
    alert('clicked outside');
});

$(".menuWraper").click(function(event) {
    alert('clicked inside');
    event.stopPropagation();
});

或者,您可以return false;而不是event.stopPropagation();

答案 1 :(得分:18)

如果您有下拉菜单等子元素

$('html').click(function(e) {
  //if clicked element is not your element and parents aren't your div
  if (e.target.id != 'your-div-id' && $(e.target).parents('#your-div-id').length == 0) {
    //do stuff
  }
});

答案 2 :(得分:11)

这里最常见的应用是关闭单击文档,但不是当它来自该元素时,为此您要停止冒泡,如下所示:

$(".menuWrapper").click(function(e) {
  e.stopPropagation(); //stops click event from reaching document
});
$(document).click(function() {
  $(".menuWrapper").hide(); //click came from somewhere else
});

所有在这里做的就是阻止点击来自bubbling up(来自event.stopPrpagation()),因为它来自.menuWrapper元素。如果此没有发生,则点击来自其他地方,默认情况下会使其达到document,如果它到达那里,我们会隐藏这些.menuWrapper元素

答案 3 :(得分:4)

尝试这些..

$(document).click(function(evt) {
    var target = evt.target.className;
    var inside = $(".menuWraper");
    //alert($(target).html());
    if ($.trim(target) != '') {
        if ($("." + target) != inside) {
            alert("bleep");
        }
    }
});

答案 4 :(得分:2)

我知道问题已得到解答,但我希望我的解决方案可以帮助其他人。

stopPropagation在我的案例中造成了问题,因为我需要click事件来处理其他问题。此外,并非每个元素都应该在单击时关闭div。

我的解决方案:

$(document).click(function(e) {
    if (($(e.target).closest("#mydiv").attr("id") != "mydiv") &&
        $(e.target).closest("#div-exception").attr("id") != "div-exception") {
        alert("Clicked outside!");
    }
});

http://jsfiddle.net/NLDu3/

答案 5 :(得分:2)

此代码将打开相关菜单,并将设置单击侦听器事件。触发后,它将遍历目标ID的父项,直到找到菜单ID。如果它没有,它将隐藏菜单,因为用户点击了菜单外部。我已经对它进行了测试,但它确实有效。

function tog_alerts(){
   if($('#Element').css('display') == 'none'){
       $('#Element').show();
       setTimeout(function () {
           document.body.addEventListener('click', Close_Alerts, false);
       }, 500);
   }
}

function Close_Alerts(e){
   var current = e.target;
   var check = 0;
   while (current.parentNode){
      current = current.parentNode
      if(current.id == 'Element'){
         check = 1;
      }
   }
   if(check == 0){
      document.body.removeEventListener('click', Close_Alerts, false);
      $('#Element').hide();         
   }
}

答案 6 :(得分:1)

我认为文档不会触发click事件。尝试使用body元素捕获click事件。可能需要检查一下......

答案 7 :(得分:0)

尝试这个

    $(document).click(function(event) {

        if(event.target.id === 'xxx' )
            return false;
        else {
              // do some this here
        }

    });

答案 8 :(得分:0)

$(document).click((e) => {
  if ($.contains($(".the-one-you-can-click-and-should-still-open").get(0), e.target)) {
  } else {
    this.onClose();
  }
}); 

答案 9 :(得分:0)

function handler(event) {
 var target = $(event.target);
 if (!target.is("div.menuWraper")) {
  alert("outside");
 }
}
$("#myPage").click(handler);

答案 10 :(得分:0)

    var visibleNotification = false;

  function open_notification() {
        if (visibleNotification == false) {
            $('.notification-panel').css('visibility', 'visible');
            visibleNotification = true;
        } else {
            $('.notification-panel').css('visibility', 'hidden');
            visibleNotification = false;
        }
    }

    $(document).click(function (evt) {
        var target = evt.target.className;
        if(target!="fa fa-bell-o bell-notification")
        {
            var inside = $(".fa fa-bell-o bell-notification");
            if ($.trim(target) != '') {
                if ($("." + target) != inside) {
                    if (visibleNotification == true) {
                        $('.notification-panel').css('visibility', 'hidden');
                        visibleNotification = false;
                    }
                }
            }
        }
    });

答案 11 :(得分:-1)

$( "element" ).focusout(function() {
    //enter code here
})