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

时间:2013-08-08 00:46:57

标签: javascript jquery

我需要找到附加到#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>

3 个答案:

答案 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'));