here - 当你点击任何地方而不是div时,我希望发生警报。
当我点击div时,警报也会显示。
的 JS 的
$("html, body").not('.entry-content').click(function() {
alert('d');
});
的 HTML 的
<div class="entry-content"> kkkk </div>
答案 0 :(得分:17)
您可以使用event参数查看单击的目标并返回false
$("html, body").click(function(e) {
if ($(e.target).hasClass('entry-content')) {
return false;
}
alert('d');
});
您正在使用.not()过滤器..但它仍然是您的html / body的一部分..因此您需要在click函数内处理它。你也只是绑定点击事件..
所以
// find html,body - not ones with class=entry-content - bind click
$("html, body").not('.entry-content')
因此,当你的div仍在体内时,这不会阻止警报
如上所述..你只需要真正绑定到身体
$("body").click(function(e) {
if ($(e.target).hasClass('entry-content')) {
return false;
}
alert('d');
});
答案 1 :(得分:7)
$("html *").click(function(e) {
if ( e.target.className.indexOf("entry-content") < 0 ) {
alert('d');
}
});
原始代码不起作用,因为.not()
适用于它前面的选择器 - html
和body
。它们都没有entry-content
类,所以事件触发
答案 2 :(得分:2)
您还可以在点击的元素上停止传播
$("body").click(function() {
alert();
});
$(".entry-content").click(function(e) {
e.stopPropagation();
});
也可以点击子元素
<div class="entry-content">Element
<span>Sub element</span>
</div>
查看Fiddle
答案 3 :(得分:0)
问题是您要将click事件添加到HTML和BODY标记中。所以,首先,当您点击身体区域时,您将收到2个警报。此外,由于事件传播的方式,单击有问题的DIV会将click事件传播到body和html。因此,您需要在点击处理程序中进行检查,以确定是否要显示警报消息。
我修改了下面的jsfiddle,只在选择器中包含HTML,并检查处理程序中的entry-content
类。
$("html").click(function(e) {
if(!$(e.target).hasClass("entry-content")){
alert('TEST');
}
});
绑定到HTML和BODY之间的区别在于,如果您希望能够单击页面上的任何位置,在内容/正文结束的位置下方,则应使用HTML。否则使用BODY。