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(); } });