有什么方法可以查看哪些函数/代码附加到DOM元素的任何事件?使用Firebug或任何其他工具。检查附加的事件处理程序是否有任何DOM元素
回答
使用传统的element.onclick= handler
或HTML <element onclick="handler">
附加的事件处理程序可以从脚本或调试器中的element.onclick
属性中简单检索。
使用DOM级别2事件附加的事件处理程序addEventListener
方法和IE的attachEvent
目前无法从脚本中检索。 DOM级别3曾经提出element.eventListenerList
以获取所有侦听器,但尚不清楚这是否会使其达到最终规范。今天在任何浏览器中都没有实现。
作为浏览器扩展的调试工具可能可以访问这些类型的侦听器,但我并不知道任何实际的操作。
一些JS框架留下了足够多的事件绑定记录来确定他们所做的事情。 Visual Event采用这种方法来发现通过一些流行框架注册的监听器。
您可以通过查看DOM直接查看附加事件(element.onclick = handler)。 您可以使用带FireQuery的FireBug在Firefox中查看jQuery附加事件。似乎没有任何方法可以使用FireBug查看addEventListener添加的事件。不过,您可以使用Chrome调试器在Chrome中查看它们。
的Elements Panel in Google Chrome Developer tools不得不这一点,因为铬中旬2011和铬显影剂通道释放自2010年
释放另外,对于所选择的节点中示出的事件侦听器是在其通过烧制顺序捕获和冒泡阶段。
命中命令 + 选项 + 我在Mac OSX和按Ctrl + 移 + 我在Windows平台上的Chrome火这件事
Chrome中的元素面板如何做到这一点? – thunderboltz 2013-09-12 09:24:26
另外,我们如何找到分配这些代码的代码?一旦我找到使用此UI的可疑事件处理程序,该栏不够宽,无法查看处理程序的代码...... – 2013-12-16 20:03:26
我发现这种方法相当困惑..至少对我来说。当我打开这个事件时,它只有jQuery事件,那个特定元素的自定义事件不显示。我使用$ ._数据为jQuery附加的自定义事件。请参阅http://stackoverflow.com/questions/2008592/can-i-find-events-bound-on-an-element-with-jquery – stack247 2014-06-24 22:37:59
你可以使用Allan Jardine的Visual Event来检查来自几个主Jav的所有当前附加的事件处理程序您页面上的aScript库。它适用于jQuery,YUI和其他几个。
Visual Event是一个JavaScript书签,因此与所有主流浏览器兼容。
您可以扩展您的javascript环境以跟踪事件侦听器。使用某些代码对原生addEventListener()方法进行包装(或“重载”),该代码可以保留任何事件侦听器的记录,从此之后添加。您还必须扩展HTMLElement.prototype.removeEventListener以保留准确反映DOM中正在发生的事件的记录。
仅用于演示(未经测试的代码)的缘故 - 这是你将如何“包装”的addEventListener会对对象本身的注册事件侦听器记录的一个例子:
var nativeMethod = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function (type, listener) {
var el = e.currentTarget;
if(!(el.eventListeners instanceof Array)) { el.eventListeners = []}
el.eventListeners.push({'type':type, 'listener':listener});
nativeMethod.call(el, type, listener);
}
Chrome开发工具最近宣布了一些新的工具Monitoring JavaScript Events。
TL; DR
收听使用
monitorEvents()
某种类型的事件。使用unmonitorEvents()
停止收听。使用
getEventListeners()
获取DOM元素的监听器。使用“事件侦听器检查器”面板获取有关事件侦听器的信息。
查找自定义事件
对于我的需要,发现自定义JS事件的第三方代码,该getEventListeners()
以下两个版本是惊人的有益的;
getEventListeners(window)
getEventListeners(document)
如果你知道什么DOM节点事件监听器被安装到你的是传递的,而不是window
或document
。
已知事件
如果你知道你要监视例如什么事件click
您可以使用以下文件:monitorEvents(document.body, 'click');
。
您现在应该开始查看控制台中记录的document.body
上的所有点击事件。
我试过这个getEventListeners(document.getElementById(“inputId”));但它返回无效,数组大小为1 – 2017-09-07 03:09:22
- 1. jQuery点击事件处理程序附加到DOM元素
- 2. 元素没有附加类时的事件处理程序
- 3. 如何检查元素是否具有点击处理程序?
- 4. 检查是否有任何元素附加到父
- 5. 将事件处理程序附加到JQuery生成的DOM元素
- 6. 如何将点击处理程序附加到DOM元素
- 7. 附加事件处理程序动态添加元素
- 8. 检查列表中的任何元素是否有事件
- 9. GWT添加事件处理程序到DOM元素
- 10. 在DOM中的所有元素上附加单击事件的事件处理程序
- 11. 引发事件处理程序附加到元素
- 12. 将事件处理程序附加到动态元素
- 13. 检查DOM元素是否有焦点
- 14. DOM元素被删除之前是否有任何事件?
- 15. 从DOM中删除元素是否会影响其事件处理程序?
- 16. 检查一个RoutedEvent是否有任何处理程序
- 17. 附加的事件处理程序
- 18. C#如何检查事件处理程序是否已完成
- 19. 哪些事件处理程序附加到DOM节点 - 如何查找?
- 20. 查看在任何事件的任何元素上注册的任何事件处理程序的代码
- 21. 附加到事件处理程序
- 22. 实时附加事件处理程序
- 23. 测试JavaScript僵尸事件处理程序或DOM元素
- 24. 显示DOM元素事件及其处理程序
- 25. 使用附加事件处理程序删除DOM元素的正确方法是什么?
- 26. 如何检查jQuery UI插件是否附加到元素?
- 27. 在现有处理程序之前附加我的事件处理程序
- 28. GWT:检查事件处理程序是否存在
- 29. 如何将事件处理程序附加到使用jQuery动态生成的DOM元素?
- 30. 检测附加的垃圾回收事件处理程序
使用jQuery或使用本机DOM连接? – SLaks 2010-04-12 15:19:07
@SLaks:好问题。使用任意机制连接 – 2010-04-12 15:19:49