当我点击页面上的任何地方(除了一个div(id=menu_content
)之外,如何触发某个功能?
非常感谢
答案 0 :(得分:116)
如果click
事件由ID为body
的div生成,您可以在click
文档上应用click
并取消menu_content
处理,这将绑定事件到单个元素并保存click
与除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
});
答案 1 :(得分:45)
请参阅jQuery Event Target的文档。使用事件对象的target属性,可以检测点击源自#menu_content
元素的位置,如果是,则提前终止点击处理程序。您必须使用.closest()
来处理点击源自#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
});
答案 2 :(得分:40)
试试这个
$('html').click(function() {
//your stuf
});
$('#menucontainer').click(function(event){
event.stopPropagation();
});
您也可以使用outside events
答案 3 :(得分:5)
我知道这个问题已经回答了,所有答案都很好。 但我想为那些有类似(但不完全相同)问题的人加上我的两分钱。
以更一般的方式,我们可以这样做:
$('body').click(function(evt){
if(!$(evt.target).is('#menu_content')) {
//event handling code
}
});
这样我们不仅可以处理除id为menu_content
的元素之外的任何事件,还可以处理除了我们可以使用CSS选择器选择的任何元素之外的任何事件。
例如,在以下代码片段中,我将获取除了所有<li>
元素之外的任何元素触发的事件,这些元素是id为myNavbar
的div元素的后代。
$('body').click(function(evt){
if(!$(evt.target).is('div#myNavbar li')) {
//event handling code
}
});
答案 4 :(得分:4)
这就是我所做的。我想确保我可以点击我的日期选择器中的任何一个孩子而不关闭它。
$('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();
}
});
答案 5 :(得分:0)
你可以试试这个:
$(":not(#menu_content)").on("click", function(e) {
e.stopPropagation();
// Run your function when clicked anywhere except #menu_content
// Use with caution, 'cause it will prevent clicking on other elements
});
$("#menu_content").on("click", function(e) {
e.stopPropagation();
// Run when clicked on #menu_content
});