如何在javascript中绑定不在元素上的单击侦听器

如何在javascript中绑定不在元素上的单击侦听器,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我想弹出一个菜单,当用户单击菜单以外的位置时,菜单将隐藏。 此外,如果单击位于具有单击侦听器的某些节点上,则不会触发这些处理函数。 我可以使用透明遮罩层来实现这一点,但是有没有更简单的方法(因为我使用jQuery)? 我试过:不是选择器 $(document).on('click',':not(.menu)',function(e){ $('.menu').hide(); }); 但它似乎不起作用(我也应该在这里添加一个e.stoppropigation())我会这样写: $(document

我想弹出一个菜单,当用户单击菜单以外的位置时,菜单将隐藏。 此外,如果单击位于具有单击侦听器的某些节点上,则不会触发这些处理函数。 我可以使用透明遮罩层来实现这一点,但是有没有更简单的方法(因为我使用jQuery)? 我试过:不是选择器

$(document).on('click',':not(.menu)',function(e){
$('.menu').hide();
});

但它似乎不起作用(我也应该在这里添加一个e.stoppropigation())

我会这样写:

$(document).on('click', function(e){
  if($(e.target).parents(".menu").length == 0)
     $('.menu').hide();
});

好建议。还有一个问题是菜单是由按钮激活的。我如何组织听众,以便按下按钮时菜单可以显示?现在,当我点击按钮时,菜单将不会显示。。。(我在if语句中添加了一个条件,即$('.menu').css('display')!='none',但在控制台中,当这个侦听器被触发时,它显示菜单已经显示(display:block),所以它再次被隐藏)好吧,if($(e.target).parents(.menu”).length==0&$(e.target)。parents(.trigger\u btn”).length==0)可以工作。。。再次感谢。你回答问题的速度比我快:)不客气。