javascript - 获取附加到元素的所有事件处理程序

标签 javascript jquery

我需要找到附加到 #mySelect 的所有事件处理程序,如果该事件是通过 jQuery 创建的,我可以获取它,这里警报(e)将仅显示“更改”而不显示“单击”

JavaScript:

$("#mySelect").change(function(){
    alert("changed");
})           
$.each($._data(  $("#mySelect")[0], "events" ), function(e) {
    alert(e);
})

HTML:

<select id="mySelect" onclick="alert('hello')" >
    <option value="1">option 1</option>
    <option value="2">option 2</option>
    <option value="3">option 3</option>
    <option value="4">option 4</option>
</select>

最佳答案

简短的回答是,仅使用 JavaScript 无法可靠地确定元素上的所有监听器。

长的答案是没有标准机制来列出所有附加的监听器。某些库保留使用该库附加的监听器列表,但不一定了解其他监听器。可以通过测试相关元素属性和属性来找到在标记中添加或作为元素属性添加的监听器(对于 onclickonchangeonblur 的测试有些乏味等)。但是不可能找到使用 addEventListenerattachEvent 添加的监听器,除非引用已保存在某处并且可用(请参阅有关库的评论)。

此外,还有一些“委托(delegate)”监听器,它们看起来像是附加到某个元素,但实际上它们附加到父元素。

关于javascript - 获取附加到元素的所有事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116163/

相关文章:

javascript - 使用 JavaScript sdk() 显示错误的 Facebook 自定义故事分享(操作需要至少一个引用)

javascript - 如何清除 jQuery 中的输入字段?

php - ajax 喜欢/不喜欢按钮不切换回来

jQuery 在 IE8 上的消失速度非常慢

javascript - 当满足特定条件时停止函数并在其他条件下再次启动它

javascript - 在 ReactJS 中,我的代码是否有支持实例,因此可以使用引用?

javascript - JavaScript 文件的初始运行

javascript - 如何解决文件具有不支持的扩展名。唯一支持的扩展名是 '.ts' 、 '.tsx' 、 '.d.ts' 、 '.js' 、 '.jsx'

javascript - 我如何使用 jQuery 为特定单词的所有实例设置样式/部分/?

javascript - 使用 jquery 查找所选菜单选项的索引