如何使用JavaScript列出DOM节点的所有已注册事件?

如何使用JavaScript列出DOM节点的所有已注册事件?,javascript,dom,event-handling,dom-events,Javascript,Dom,Event Handling,Dom Events,我可以为DOM节点添加或删除事件处理程序。是否可以找出给定DOM节点的所有已注册事件处理程序?我指的是纯Javascript,意思是没有jQuery、dojo、Prototype、GWT等框架或工具包。如果答案是否定的,有什么原因吗?安全问题?DOM级别3指定了—但是,我不知道有任何DOM实现支持此功能—或任何其他列出事件侦听器的可靠方式。这似乎是对这一点的疏忽。可以显示已注册的事件,但它仅适用于DOM级别0附加的事件;W3C 2级实现以及Internet Explorer专有方法不受支持和/或

我可以为DOM节点添加或删除事件处理程序。是否可以找出给定DOM节点的所有已注册事件处理程序?我指的是纯Javascript,意思是没有jQuery、dojo、Prototype、GWT等框架或工具包。如果答案是否定的,有什么原因吗?安全问题?

DOM级别3指定了—但是,我不知道有任何DOM实现支持此功能—或任何其他列出事件侦听器的可靠方式。这似乎是对这一点的疏忽。

可以显示已注册的事件,但它仅适用于DOM级别0附加的事件;W3C 2级实现以及Internet Explorer专有方法不受支持和/或无法检索。

我知道这是一个老问题,但为了以防万一,对于chrome,您可以使用getEventListeners

如本文所述:


如果你想发现一些事件,为了禁用它-我来这里就是因为这个-我建议在Mozilla Firefox上使用Firebug扩展。选择您感兴趣的文档部分,查看右侧面板的“事件”选项卡:您将看到所有事件,甚至可以禁用它们。

这适用于Chrome/Safari控制台:

getEventListeners(document.getElementByID('myElementId'));

另外,在谷歌Chrome中,请选择元素并注意数字,它将显示$0或任何其他数字

然后在console中,键入此代码并按enter键

getEventListeners($0)
然后你会看到结果。请参见下图以了解更多详细信息


我也遇到了同样的问题,在这里着陆,但没有找到有用的答案

如果您可以在来自其他方的调用之前执行script
addEventListener
,您可能会执行一些非常肮脏的操作,例如:

var obj = something; // Your DOM element you want to watch

var beforeAddEvent = obj.addEventListener;
obj.addEventListener = function() {
  // Do something with arguments here (like storing in an array)
  // arguments[0]: event name
  // arguments[1]: Listener function
  // arguments[3]: eventual options passed

  // If you don't call this, the event listener won't even be attached, it might be also useful in some case
  beforeAddEvent.apply(obj, arguments);
};

DOM级别3没有定义eventListenerList(您正在链接到2002年的草稿)。请看@Nickolay-看到工作组看不到API的用例真是令人难以置信的失望,但感谢您指出它已经被删除了。请在“规范”中更新这个答案。我不得不读了一篇评论才感到失望。一个两年多前提出的问题的可能重复是两天前提出的问题的重复吗?