javascript - 在 jQuery 中绑定(bind)事件后,如何获取对事件处理函数的引用?

标签 javascript jquery

如果我附加一个点击事件处理程序:

$(".selector").bind("click", function () {
  // some handler function
});

如何获得对该函数的引用?这不起作用:

var refToFunc = $(".selector").bind("click");
typeof refToFunc === "object";  // I want the function

我认为 bind("eventname") 在那种情况下只返回 jQuery 对象而不是事件处理函数。它必须存储在某个地方。

最佳答案

非常有趣的问题。您可以像这样检索它:

var refToFunc = $(".selector").data("events")["click"][0].handler;

请注意,我们使用 [0] 是因为您有一组处理程序,以防您绑定(bind)多个处理程序。对于其他事件,只需更改为事件名称即可。

编辑 通常,您可以使用以下插件获取事件的选定元素的所有处理程序(代码尚未优化):

$.fn.getEventHandlers = function(eventName){
  var handlers = [];
  this.each(function(){
     $.each($(this).data("events")[eventName], function(i, elem){
         handlers.push(elem.handler);    
     });     
  });
  return handlers;
};

如何使用?

$(".selector").getEventHandlers("click");

它会返回一个包含所有事件处理程序的函数数组。

对于你的具体问题,你可以像这样使用这个插件:

var refToFunc = $(".selector").getEventHandlers("click")[0];

希望这对您有所帮助。干杯

关于javascript - 在 jQuery 中绑定(bind)事件后,如何获取对事件处理函数的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631570/

相关文章:

javascript - 如何将函数变量转换为 div id 名称?

javascript - 如何在javascript中使用div id引用输入id

javascript - 在 React/Redux 中管理兄弟组件之间的滚动状态

javascript - 在 Javascript 书签中动态生成整个页面

javascript - HTML 文件中 javascript 的代码辅助在 Aptana 3 中无法正常工作

javascript - Jquery Scroll() 需要 2 个参数

javascript - 使用 jQuery 函数切换 div

jquery - 如何让无限数量的div彼此相邻显示

javascript - 在Jquery和css中切换两种不同的状态

javascript - 如何用javascript读取cookie值?