我需要找到附加到 #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 无法可靠地确定元素上的所有监听器。
长的答案是没有标准机制来列出所有附加的监听器。某些库保留使用该库附加的监听器列表,但不一定了解其他监听器。可以通过测试相关元素属性和属性来找到在标记中添加或作为元素属性添加的监听器(对于 onclick、onchange、onblur 的测试有些乏味等)。但是不可能找到使用 addEventListener 或 attachEvent 添加的监听器,除非引用已保存在某处并且可用(请参阅有关库的评论)。
此外,还有一些“委托(delegate)”监听器,它们看起来像是附加到某个元素,但实际上它们附加到父元素。
关于javascript - 获取附加到元素的所有事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116163/