如何使用JavaScript列出DOM节点的所有已注册事件?
我可以为DOM节点添加或删除事件处理程序。是否可以找出给定DOM节点的所有已注册事件处理程序?我指的是纯Javascript,意思是没有jQuery、dojo、Prototype、GWT等框架或工具包。如果答案是否定的,有什么原因吗?安全问题?DOM级别3指定了—但是,我不知道有任何DOM实现支持此功能—或任何其他列出事件侦听器的可靠方式。这似乎是对这一点的疏忽。可以显示已注册的事件,但它仅适用于DOM级别0附加的事件;W3C 2级实现以及Internet Explorer专有方法不受支持和/或无法检索。我知道这是一个老问题,但为了以防万一,对于chrome,您可以使用getEventListeners 如本文所述:如何使用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专有方法不受支持和/或
如果你想发现一些事件,为了禁用它-我来这里就是因为这个-我建议在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的用例真是令人难以置信的失望,但感谢您指出它已经被删除了。请在“规范”中更新这个答案。我不得不读了一篇评论才感到失望。一个两年多前提出的问题的可能重复是两天前提出的问题的重复吗?