jQuery单击页面中除1 div之外的任何地方

当我点击我的页面上的任何地方,除了一个div(id = menu_content),我怎么能触发一个function?

非常感谢你

如果click事件是由ID为menu_content的div生成的,则可以应用click文档body并取消click处理,这将把事件绑定到单个元素并保存click与除menu_content以外的每个元素的menu_content

 $('body').click(function(evt){ if(evt.target.id == "menu_content") return; //For descendants of menu_content being clicked, remove this check if you do not want to put constraint on descendants. if($(evt.target).closest('#menu_content').length) return; //Do processing of click event here for every element except with id menu_content }); 

尝试这个

  $('html').click(function() { //your stuf }); $('#menucontainer').click(function(event){ event.stopPropagation(); }); 

你也可以使用外部事件

请参阅jQuery Event Target的文档。 使用事件对象的target属性,可以检测到在#menu_content元素中发生点击的#menu_content ,如果是,则尽早终止点击处理程序。 您必须使用.closest()来处理点击来自#menu_content的后代的#menu_content

 $(document).click(function(e){ // Check if click was triggered on or within #menu_content if( $(e.target).closest("#menu_content").length > 0 ) { return false; } // Otherwise // trigger your click function }); 

我知道这个问题已经回答了,所有的答案都很好。 但是我想为这个问题增加我的两分钱给那些有类似(但不完全一样)的问题的人。 Adils的回答非常好。 用更一般的方式,我们可以这样做:

 $('body').click(function(evt){ if(!$(evt.target).is('#menu_content')) { //event handling code } }); 

这样,除了id =“menu_content”的元素外,我们不仅可以处理由事件触发的事件,而且还可以处理由任何可以使用CSSselect器select的元素以外的任何东西重新触发的事件。 例如在下面的代码片段中,我得到的是由任何元素触发的事件,除了所有li元素(id元素的后代,id =“myNavbar”

 $('body').click(function(evt){ if(!$(evt.target).is('div#myNavbar li')) { //event handling code } }); 

这是我做的。 想确保我可以点击我的dateselect器中的任何一个孩子而不closures它。

 $('html').click(function(e){ if (e.target.id == 'menu_content' || $(e.target).parents('#menu_content').length > 0) { // clicked menu content or children } else { // didnt click menu content } }); 

我的实际代码:

 $('html').click(function(e){ if (e.target.id != 'datepicker' && $(e.target).parents('#datepicker').length == 0 && !$(e.target).hasClass('datepicker') ) { $('#datepicker').remove(); } });