noob方式这样做我猜是
$('*').click(function(){...});
但有没有办法可以捕获任何类型的点击,而无需为DOM中的每个对象注册一个监听器?
帮助会很棒。 =)
答案 0 :(得分:30)
click
事件默认为bubble up the DOM,因此您只需将click
处理程序附加到根目录,如下所示:
$(document).click(function() {
//do something
});
除非{* 3}}或return false
上的元素上的处理程序,否则您将获得此处的点击。
答案 1 :(得分:17)
您可以在文档上使用事件委派来捕获所有点击。
jQuery将填充target
的{{1}}属性以检索被点击的元素。
event
请注意,$(document).click(function(event){
// event.target is the clicked object
});
将是点击的最深元素。例如:如果event.target
中有<span>
,您将获得<a>
,而不是<span>
。
如果您想捕获任何点击但想要检索特定元素(如类),您可以这样做:
<a>
除非在整个过程中元素上的事件处理程序执行event.stopPropagation()
或$(document).click(function(event){
$(event.target).closest(".clickable").each(function(){
// "this" is your "clickable" clicked
});
});
,否则您将获得此处的点击。
答案 2 :(得分:4)
如果只是将咔嗒附加到身体上呢?
$('body').click(function(e){ ... })
e.target
应该包含点击的内容
答案 3 :(得分:4)
$('*').click( function() {...} )
只会抓住您拨打.click()
时存在的元素的点击次数。要捕获稍后可能创建的元素的点击次数,您需要像其他人建议的那样绑定到body
或document
。
答案 4 :(得分:3)
怎么样:
$('body').click(function(){...});
任何点击都将在主体上,因为它是dom中所有可见节点的父节点。