我仍然无法相信这是不可能的,但有一种方法可以循环访问dom并查看使用'addEventListener'附加的所有事件处理程序。 This post和其他许多人说没有。
如果是这种情况那么Chrome浏览器或Firebug等应用程序如何显示它们,他们会这样做?我猜他们可能会以某种方式增加dom的方法,以便他们可以跟踪绑定的内容。
答案 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。