22

我仍然无法相信这是不可能的,但有没有办法循环遍历 dom 并查看使用“addEventListener”附加的所有事件处理程序。这篇文章和许多其他人说不。

如果是这样的话,那么像 Chrome 的检查器或 Firebug 这样的应用程序如何显示它们,它们会做什么?我猜他们可能会以某种方式增强 dom 的方法,以便他们可以跟踪绑定的内容。

4

4 回答 4

34

Chrome 的控制台有一个方法可以帮助您检查 dom 节点是否注册了任何事件监听器,例如检查附加到文档节点的事件监听器使用:

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document);

您可以递归地遍历所有 dom 节点,并在需要时找到所有附加的事件处理程序。

于 2013-07-04T09:08:36.210 回答
6

当然,浏览器内部有一个事件监听器列表,但它不会暴露给页面级 JavaScript。例如,Firebug(或Eventbug)可能使用nsIEventListenerInfo

话虽如此,这个旧答案仍然成立:
如何在 DOM 节点上找到事件侦听器?

于 2012-06-08T05:31:48.140 回答
0

在 Chrome v53 控制台上,我尝试过:

getEventListeners(document);

返回:

__proto__: Object

和子元素,不是我要找的。

所以我试过:

getEventListeners(window);

返回

Object {beforeunload: Array[1], load: Array[1]}

这就是我要找的。所以我认为正确的做法是:

getEventListeners(myDomElement):

其中myDomElement是通过getElementById 等标准方法获得的目标对象......

于 2016-09-30T17:53:16.310 回答
0

使用以下函数获取已注册事件的 json;

getEventListeners(node_name);wherenode_name可以是元素名称或其 id。

于 2017-01-15T03:29:39.913 回答