2011-05-19 38 views
29

点击jQuery中的元素会导致气泡达到正文。如果我们有一个绑定到正文的点击处理程序来显示警报,那么单击任何元素都会触发正文并触发警报。我的问题是,有什么方法可以知道身体警报是由于直接点击正文而触发的,还是由于气泡直到身体而触发的点击。有什么方法可以检查泡沫是否触发了点击?

+1

不管你做什么,要警惕stopPropagation的。这将打破所有'.live'调用。 – 2011-05-19 18:23:58

回答

51

比较event.targetthisthis始终是处理程序绑定的事件; event.target始终是事件发生的元素。

$(document.body).click(function(event) { 
    if (event.target == this) { 
     // event was triggered on the body 
    } 
}); 

在元素的您知道是一个文档中是唯一的情况下(基本上,只是body)你也可以检查nodeNamethis的:

$(document.body).click(function(event) { 
    if (event.target.nodeName.toLowerCase() === 'body') { 
     // event was triggered on the body 
    } 
}); 

你要做toLowerCase()因为案件nodeName在浏览器中不一致。

最后一个选项是比较一个ID,如果你的元素有一个,因为这些也必须是唯一的:

$('#foo').click(function(event) { 
    if (event.target.id === 'foo') { 
     // event was triggered on #foo 
    } 
}); 
+0

感谢您的解释。 – Pinkie 2011-05-19 19:15:55

+0

男人,非常感谢! :) – 2015-02-05 18:27:51

5

你可以查阅一下与单击event.target

$(something).click(function(e){ 
    alert(e.target) 
}) 
2

“事件”参数传递给处理程序有一个“目标”属性,它是指是事件的直接目标的元素。您可以检查该属性以查看它是否为<body>元素。

请注意,jQuery“.delegate()”工具可用于为您检查。

相关问题