如何检查是否有任何JavaScript事件侦听器/处理程序附加到元素/文档?

时间:2010-03-04 21:54:49

标签: javascript jquery javascript-events

尝试在线搜索,但看起来我不能正确制定搜索查询。

听起来很简单,我怎么能用jquery或javascript列出所有附加到元素/文档/窗口或存在于dom中的处理程序或事件监听器。

只是想知道。

提前谢谢。

4 个答案:

答案 0 :(得分:47)

在1.8之前的jQuery中,尝试使用$("#element").data("events")

修改

还有jQuery扩展名:listHandlers

答案 1 :(得分:32)

调试时,如果您想查看是否有活动,我建议您使用Chrome开发者工具的Visual Event Elements“部分:选择一个元素并查找”事件监听器在右下角。

在您的代码中,如果您在1.8版之前使用jQuery,则可以使用:

$(selector).data("events")

获取活动。从版本1.8开始,这已经停止(请参阅this bug ticket)。您可以使用:

$._data(element, "events")

但不建议这样做,因为它是一个内部jQuery结构,并且可能在将来的版本中发生变化。

This question有一些可能有用的答案,但没有一个像$(selector).data("events")那样特别优雅。

答案 2 :(得分:16)

没有jQuery:

如果使用elem.addEventListener()方法添加侦听器,则列出这些侦听器并不容易。您可以通过使用自己的方法包装它来覆盖EventTarget.addEventListener()方法。然后你将获得有关已注册的听众的信息。

var f = EventTarget.prototype.addEventListener; // store original
EventTarget.prototype.addEventListener = function(type, fn, capture) {
  this.f = f;
  this.f(type, fn, capture); // call original method
  alert('Added Event Listener: on' + type);
}

工作示例您可以在http://jsfiddle.net/tomas1000r/RDW7F/

找到

答案 3 :(得分:3)

我刚刚发现了视觉事件2:

http://www.sprymedia.co.uk/article/Visual+Event+2

转到“make it go”部分,然后将文本链接拖到书签工具栏 转到包含事件的页面,然后单击书签

在FF Mac中测试