Accessing functions bound to event handlers with jQuery

event-handling, events, internal, jquery, storage

Solution

Edit: the method below works only in jQuery < 1.7

You can find a lot of interesting tips and tricks in this article: Things you may not know about jQuery.

It seems that jQuery uses `data` to store event handlers:

You can access all event handlers bound to an element (or any object) through jQuery’s event storage:

// List bound events:
console.dir( jQuery('#elem').data('events') );

// Log ALL handlers for ALL events:
jQuery.each($('#elem').data('events'), function(i, event){
    jQuery.each(event, function(i, handler){
        console.log( handler['handler'].toString() );
    });
});

// You can see the actual functions which will occur
// on certain events; great for debugging!

Problem

With jQuery you can bind functions to an event triggered on a DOM object using `.bind()` or one of the event handler helper functions. jQuery have to store this internally somehow and I wonder if is it possible given a DOM object, to find out which events have been bound to the object, and access those functions etc. The desired return result could look something like this: ``` { click: [function1, function2], change: [function3], blur: [function4, function5, function6] } ```

Original source

Related problems