使用jQuery访问绑定到事件处理函数的函数

使用jQuery,您可以使用.bind()或其中一个事件处理帮助器函数将函数绑定到在DOM对象上触发的事件。

jQuery必须以某种方式内部存储它,我想知道是否有可能给出一个DOM对象,找出哪些事件已被绑定到对象,并访问这些function等。所需的返回结果可能看起来像这样:

 { click: [function1, function2], change: [function3], blur: [function4, function5, function6] } 

编辑下面的方法只适用于jQuery <1.7

你可以在这篇文章中find很多有趣的提示和技巧: 你可能不了解jQuery的东西 。

看来,jQuery使用data来存储事件处理程序:

你可以通过jQuery的事件存储访问绑定到元素(或任何对象)的所有事件处理程序:

 // 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! 

jQuery 1.7已经停止了在常规data()函数中暴露事件。 你仍然可以得到他们这样的:

 var elem = $('#someid')[0]; var data = jQuery.hasData( elem ) && jQuery._data( elem ); console.log(data.events); 

请注意,这只适用于使用jQuery绑定的事件。 AFAIK你没有办法看到使用像addEventListener这样的常规DOM函数绑定的所有事件。

您可以在webkit检查器中看到它们:在“元素”选项卡中,导航到所需的DOM节点,在右侧select“事件监听器”下拉列表。