捕捉使用 jQuery 执行的任何点击

Posted

技术标签:

【中文标题】捕捉使用 jQuery 执行的任何点击【英文标题】:Catching any click performed using jQuery 【发布时间】:2011-03-17 16:24:36 【问题描述】:

我猜菜鸟的做法是

$('*').click(function()...);

但是有什么方法可以捕获任何类型的点击,而无需为 DOM 中的每个对象注册一个侦听器?


帮助将是惊人的。 =)

【问题讨论】:

【参考方案1】:

click 事件默认为bubble up the DOM,因此您只需将click 处理程序附加到根,如下所示:

$(document).click(function() 
  //do something
);

除非沿途元素上的处理程序执行event.stopPropagation()return false,否则您会点击此处。

【讨论】:

+1,只是在写这个。当然,这假设没有其他点击处理程序使用event.stopPropagation() 取消冒泡。 event.stopPropagation() 非常有用!感谢您提供此内容 @Andy - +1 - 重要的一点,在你评论的时候补充一下:)【参考方案2】:

您可以在文档上使用事件委托来捕获所有点击。

jQuery 将填充eventtarget 属性以检索被点击的元素。

$(document).click(function(event)
  // event.target is the clicked object
);

请注意,event.target 将是点击最深的元素。例如:如果<a> 中有<span>,您将得到<span>,而不是<a>

如果您想捕捉任何点击但又想检索特定元素(如类),您可以这样做:

$(document).click(function(event)
  $(event.target).closest(".clickable").each(function()
    // "this" is your "clickable" clicked
  );
);

除非沿途元素上的事件处理程序执行event.stopPropagation()return false,否则您会点击此处。

【讨论】:

感谢这是一个了不起的回复,感谢您提供的信息不是必需的,但非常有用!如果您还可以添加“event.stopPropagation()”事实,我很乐意勾选这个答案 =D 我相信.closest() 只会返回一个父对象,因此没有必要使用.each() @fudgey - 这取决于使用情况,例如 $(this).plugin( option: this.id ); 不能被链接(this 将是错误的元素),但很好地存在于 .each() 闭包中。 @fudgey .closest() 实际上可能返回一个空的 jQuery,所以使用 .each() 是使用 if 测试返回值是否存在的捷径 如果你想在点击某个元素时停止事件:if ($(event.target).closest('#myElement').length > 0 ) event.stopPropagation(); 【参考方案3】:

怎么样:

$('body').click(function()...);

任何点击都会在 body 上,因为它是 dom 中所有可见节点的父节点。

【讨论】:

看起来在 jQuery 3 中 .click(function()...); 已被弃用,您需要使用 $(document).on('click', 'body', function());【参考方案4】:

给正文添加一个点击怎么样?

$('body').click(function(e) ... )

e.target 应该包含被点击的内容

【讨论】:

【参考方案5】:

$('*').click( function() ... ) 只会捕获对您调用.click() 时存在的元素的点击。要捕获对稍后可能创建的元素的点击,您需要按照其他人的建议绑定到 bodydocument

【讨论】:

感谢您提供的额外知识,非常有价值。 请注意,这将在 DOM 中的每个元素上绑定 click 事件处理程序,这将消耗更多内存并在页面运行时需要更多 CPU。

以上是关于捕捉使用 jQuery 执行的任何点击的主要内容,如果未能解决你的问题,请参考以下文章

jquery的表单验证方法,一个function能不能同时捕捉点击事件和按键事件?能不能再优化下,有代码。

jQuery 捕捉下一个 div(类)

jQuery UI 可拖动的捕捉标尺

使用 Katalon Studio 捕捉 jQuery 的注意事项

捕捉 Mac 触控板缩放

Python - 捕捉无人机程序的任何错误[重复]