我需要找到附加到#mySelect的所有事件处理程序,如果事件是通过jQuery创建的,我可以得到它,这里alert(e)只会显示“change”而不是“click”
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>
答案 0 :(得分:25)
简短的回答是,使用javascript无法可靠地确定元素上的所有侦听器。
答案很长,没有标准机制列出所有附加的侦听器。有些库保留了使用库附加的侦听器列表,但不一定了解其他侦听器。可以通过测试相关元素属性和属性(对于 onclick , onchange , onblur 进行一些单调乏味的测试)来找到标记中添加的侦听器或元素属性等,每个元素)。但是找不到使用 addEventListener 或 attachEvent 添加的侦听器是不可能的,除非在某处保留了引用并使其可用(请参阅有关库的注释)。
此外,还有“委托”侦听器,这些侦听器在将元素附加到父元素时会给出附加到元素的外观。
答案 1 :(得分:9)
$( '#mySelect' ).bind( {
'change': function( event ) {
},
'click': function( event ) {
}
});
$.each($._data( $("#mySelect")[0], "events" ), function(e) {
alert(e);
});
答案 2 :(得分:-1)
此外,对于附加内联的事件,您可以尝试:
alert(document.getElementById('mySelect').getAttribute('onclick'));