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

IT技术 javascript jquery dom-events
2021-03-09 06:55:56

尝试在线搜索,但看起来我无法正确制定搜索查询。

我如何使用 jQuery 或仅使用 javascript 列出附加到元素/文档/窗口或存在于 DOM 中的所有处理程序或事件侦听器?

4个回答

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

编辑:

还有 jQuery 扩展:listHandlers

在 Chrome 中为我工作。谢谢!
2021-04-27 06:55:56
在 W3C 事件模型的当前实现中似乎不太可能。请参阅: quirksmode.org/js/events_advanced.html (搜索“注册了哪些事件处理程序?”)那里的页面有点旧,所以也许现在情况好转了,不能告诉你这些,我自己从来没有尝试过。 ..
2021-05-04 06:55:56
我刚刚试过这个,它不起作用......
2021-05-11 06:55:56
这在较新版本的 jQuery 中不起作用。相反,您现在必须使用$._data($('#element')[0], 'events') 注意:第一个参数必须是 HTML 元素,而不是 jQuery
2021-05-13 06:55:56
谢谢你 Laimoncijus,如果没有 jquery,你怎么拉?也许你可以给我链接到关于这个主题的阅读材料。
2021-05-15 06:55:56

调试时,如果只想查看是否有事件,我建议使用Chrome 开发人员工具的“可视事件”或“元素”部分:选择一个元素并在右下角查找“事件侦听器”

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

$(selector).data("events")

获取事件。从 1.8 版开始,此功能已停止使用(请参阅此错误票证)。您可以使用:

$._data(element, "events")

但这是不推荐的,因为它是一个内部 jQuery 结构,并且可能会在未来的版本中发生变化。

这个问题有一些可能有用的答案,但没有一个像$(selector).data("events")以前那样特别优雅

+1视觉事件是必不可少的。坦率地说,我很惊讶浏览器没有为他们的开发工具包含这个功能。
2021-05-01 06:55:56

没有 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);
}

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

好的!问题的正确答案。
2021-04-27 06:55:56

我刚刚发现了视觉事件 2:

http://www.sprymedia.co.uk/article/Visual+Event+2

转到“让它运行部分”并将文本链接拖动到书签工具栏转到包含事件的页面并单击书签

在 FF Mac 中测试

这是真的,目前不适用于委托事件。添加票证以希望在未来解决这个问题:github.com/DataTables/VisualEvent/issues/33
2021-05-15 06:55:56