如果我附加一个点击事件处理程序:
$(".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/