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

Posted

技术标签:

【中文标题】使用 jQuery 访问绑定到事件处理程序的函数【英文标题】:Accessing functions bound to event handlers with jQuery 【发布时间】:2011-01-24 04:29:21 【问题描述】:

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

jQuery 必须以某种方式在内部存储它,我想知道是否有可能给定一个 DOM 对象,找出哪些事件已绑定到该对象,并访问这些函数等。所需的返回结果可能如下所示:


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

【问题讨论】:

看到这个问题:***.com/questions/2382994/… 【参考方案1】:

jQuery 1.7 已停止在常规 data() 函数中公开事件。你仍然可以像这样得到它们:

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

请注意,这只适用于使用 jQuery 绑定的事件。 AFAIK,您无法查看使用常规 DOM 函数(如 addEventListener)绑定的所有事件。

您可以在 webkit 检查器中看到它们:在 Elements 选项卡中导航到所需的 DOM 节点,在右侧选择“Event Listeners”下拉菜单。

【讨论】:

只是补充一点,jQuery._data(elem, 'events')也可以用来直接获取events数组【参考方案2】:

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

您可以在这篇文章中找到很多有趣的提示和技巧:Things you may not know about 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 和更新版本;请参阅 eikes 对新方法的回答。 不工作。试过$(document).data('events') & $('html').data('events') -- 没用。

以上是关于使用 jQuery 访问绑定到事件处理程序的函数的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 事件方法

jQuery事件处理

jQuery load和unload函数使用

如何将事件处理程序绑定到 jQuery 中的实例?

jQuery事件

jQuery 多事件处理程序 - 如何取消?