如何检查是不是有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制]
Posted
技术标签:
【中文标题】如何检查是不是有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制]【英文标题】:How to check if any JavaScript event listeners/handlers attached to an element/document? [duplicate]如何检查是否有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制] 【发布时间】:2011-01-23 21:21:17 【问题描述】:尝试在线搜索,但我似乎无法正确制定搜索查询。
如何使用 jQuery 或仅使用 javascript 列出所有附加到元素/文档/窗口或存在于 DOM 中的处理程序或事件侦听器?
【问题讨论】:
见***.com/questions/446892/…和***.com/questions/7810534/… 【参考方案1】:在1.8之前的jQuery中,尝试使用$("#element").data("events")
编辑:
还有jQuery扩展:listHandlers
【讨论】:
谢谢 Laimoncijus,如果没有 jquery,你将如何实现它?也许你可以给我链接到关于这个主题的阅读材料。 似乎在 W3C 事件模型的当前实现中是不可能的。请参阅:quirksmode.org/js/events_advanced.html(搜索“哪些事件处理程序已注册?”)那里的页面有点旧,所以也许现在情况有所好转,不能告诉你瘦,我自己从未尝试过...... 我刚试过这个,不行..... 在 Chrome 中为我工作。谢谢! 这在较新版本的 jQuery 中不起作用。相反,您现在必须使用$._data($('#element')[0], 'events')
注意: 第一个参数必须是 HTML 元素,而不是 jQuery【参考方案2】:
我刚刚发现了视觉事件 2:
http://www.sprymedia.co.uk/article/Visual+Event+2
进入“让它开始”部分,然后将文本链接拖到您的书签工具栏 转到有事件的页面并点击书签
在 FF Mac 中测试
【讨论】:
这是真的,目前不适用于委托事件。添加票证以希望将来解决此问题:github.com/DataTables/VisualEvent/issues/33【参考方案3】:调试时,如果你只想查看是否有事件,我建议使用Visual Event 或 Chrome 开发者工具的 Elements 部分:选择一个元素并查找“Event Listeners右下角。
在你的代码中,如果你使用的是 1.8 之前的 jQuery,你可以使用:
$(selector).data("events")
获取事件。从 1.8 版开始,此功能已停用(请参阅 this bug ticket)。您可以使用:
$._data(element, "events")
但不推荐这样做,因为它是一个内部 jQuery 结构,并且可能会在未来的版本中更改。
This question 有一些可能有用的答案,但它们都不像$(selector).data("events")
那样特别优雅。
【讨论】:
+1 视觉事件是必不可少的。坦率地说,我很惊讶浏览器没有将这个功能包含在他们的开发工具中。【参考方案4】:没有 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/找到工作示例
【讨论】:
不错!问题的正确答案。以上是关于如何检查是不是有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将事件侦听器添加到动态创建的复选框并检查是不是选中了复选框。 JavaScript
Javascript/Jquery-如何检查函数是不是返回任何值?
如何从 JavaScript 中的无线电输入中获取“未检查”事件?