如何检查是否有任何JavaScript事件侦听器/处理程序附加到元素/文档?

Gnr*_*zik 76 javascript jquery javascript-events

试图在线搜索,但看起来我不能正确地制定搜索查询.

听起来很简单,我怎么能用jquery或javascript列出所有附加到元素/文档/窗口或存在于dom中的处理程序或事件监听器.

就是想.

先感谢您.

Lai*_*jus 47

在1.8之前的jQuery中,尝试使用 $("#element").data("events")

编辑:

还有jQuery扩展:listHandlers

  • 我刚试过这个并没有用..... (7认同)
  • 这在较新版本的jQuery中不起作用.相反,你现在必须使用`$ ._ data($('#element')[0],'events')`**注意:**第一个参数必须是HTML元素,而不是jQuery (5认同)
  • 谢谢Laimoncijus,如果没有jquery你会怎么拉?也许你可以给我链接阅读关于这个主题的材料. (4认同)
  • 在W3C事件模型的当前实现中似乎不太可能.请参阅:http://www.quirksmode.org/js/events_advanced.html(搜索"哪些事件处理程序已注册?")页面有一点旧,所以也许现在情况好转了,不能告诉你这些,从来没有尝试过... (3认同)

Luk*_*uke 32

在调试时,如果你想看看是否有事件,我建议使用Chrome的开发者工具的Visual EventElements部分:选择一个元素并在右下方查找"事件监听器".

在您的代码中,如果您在1.8版之前使用jQuery,则可以使用:

$(selector).data("events")
Run Code Online (Sandbox Code Playgroud)

得到事件.从版本1.8开始,这已经停止(请参阅此错误凭单).您可以使用:

$._data(element, "events")
Run Code Online (Sandbox Code Playgroud)

但不建议这样做,因为它是一个内部jQuery结构,并且可能在将来的版本中发生变化.

这个问题有一些可能有用的答案,但它们都没有像现在这样特别优雅$(selector).data("events").


小智 17

没有jQuery:

如果使用elem.addEventListener()方法添加侦听器,则列出这些侦听器并不容易.您可以通过使用自己的方法包装它来覆盖EventTarget.addEventListener()方法.然后您将获得有关已注册的听众的信息.

var f = EventTarget.prototype.addEventListener; // store original
EventTarget.prototype.addEventListener = function(type, fn, capture) {
  this.f = f;
  this.f(type, fn, capture); // call original method
  alert('Added Event Listener: on' + type);
}
Run Code Online (Sandbox Code Playgroud)

您可以在http://jsfiddle.net/tomas1000r/RDW7F/找到工作示例