如何使用JavaScript在DOM节点上查找事件侦听器

时间:2012-06-07 21:23:42

标签: javascript

我仍然无法相信这是不可能的,但有一种方法可以循环访问dom并查看使用'addEventListener'附加的所有事件处理程序。 This post和其他许多人说没有。

如果是这种情况那么Chrome浏览器或Firebug等应用程序如何显示它们,他们会这样做?我猜他们可能会以某种方式增加dom的方法,以便他们可以跟踪绑定的内容。

4 个答案:

答案 0 :(得分:28)

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

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

getEventListeners(document);

您可以递归迭代所有dom节点,并在需要时找到所有事件处理程序。

答案 1 :(得分:6)

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

话虽如此,这个旧答案仍然有效:
How to find event listeners on a DOM node?

答案 2 :(得分:0)

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

<强> getEventListeners(文件);

返回:

__ proto__:对象

和子元素,而不是我正在寻找的东西。

所以我试过了:

<强> getEventListeners(窗口);

返回

对象{beforeunload:Array [1],load:Array [1]}

这就是我要找的东西。 所以我认为正确的方法是罗宾喜欢鸟的方式:

<强> getEventListeners(myDomElement):

其中 myDomElement 是使用getElementById等标准方式获得的目标对象 ...

答案 3 :(得分:0)

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

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