jQuery find events handlers registered with an object

后端 未结 16 3130
予麋鹿
予麋鹿 2020-11-21 07:16

I need to find which event handlers are registered over an object.

For example:

$(\"#el\").click(function() {...});
$(\"#el\").mouseover(function() {         


        
16条回答
  •  南旧
    南旧 (楼主)
    2020-11-21 07:57

    To check for events on an element:

    var events = $._data(element, "events")
    

    Note that this will only work with direct event handlers, if you are using $(document).on("event-name", "jq-selector", function() { //logic }), you will want to see the getEvents function at the bottom of this answer

    For example:

     var events = $._data(document.getElementById("myElemId"), "events")
    

    or

     var events = $._data($("#myElemId")[0], "events")
    

    Full Example:

    
        
            
            
        
        
            
    Text

    A more complete way to check, that includes dynamic listeners, installed with $(document).on

    function getEvents(element) {
        var elemEvents = $._data(element, "events");
        var allDocEvnts = $._data(document, "events");
        for(var evntType in allDocEvnts) {
            if(allDocEvnts.hasOwnProperty(evntType)) {
                var evts = allDocEvnts[evntType];
                for(var i = 0; i < evts.length; i++) {
                    if($(element).is(evts[i].selector)) {
                        if(elemEvents == null) {
                            elemEvents = {};
                        }
                        if(!elemEvents.hasOwnProperty(evntType)) {
                            elemEvents[evntType] = [];
                        }
                        elemEvents[evntType].push(evts[i]);
                    }
                }
            }
        }
        return elemEvents;
    }
    

    Example usage:

    getEvents($('#myElemId')[0])
    

提交回复
热议问题