Javascript 在jQuery中绑定事件后,如何获取对事件处理程序函数的引用?

Javascript 在jQuery中绑定事件后,如何获取对事件处理程序函数的引用?,javascript,jquery,Javascript,Jquery,如果我附加了click事件处理程序: $(".selector").bind("click", function () { // some handler function }); 如何获取该函数的引用?这不起作用: var refToFunc = $(".selector").bind("click"); typeof refToFunc === "object"; // I want the function 我认为在这种情况下,bind(“eventname”)只返回jQuery

如果我附加了click事件处理程序:

$(".selector").bind("click", function () {
  // some handler function
});
如何获取该函数的引用?这不起作用:

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

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

事件处理程序保存在一个数据对象中,可通过
数据访问。例如:

$('.selector').data('events').click[0].handler;
这将获取绑定到此函数的
click
事件的第一个事件处理程序函数

var handler = function() {
    // some content
});

$('.selector').bind('click', handler);

如果要保留函数的引用(例如解除绑定),最好将其存储在变量中或使其成为命名函数

var handler = function() {
    // some content
});

$('.selector').bind('click', handler);

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

var refToFunc = $(".selector").data("events")["click"][0].handler;
var refToFunc = $(".selector").getEventHandlers("click")[0];
请注意,我们使用了
[0]
,因为您有一个处理程序数组,以防绑定多个处理程序。对于其他事件,只需更改为事件名称

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

如何使用它

$(".selector").getEventHandlers("click");
它将返回一个包含所有事件处理程序的函数数组

对于您的特定问题,您可以使用如下插件:

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

希望这有帮助。干杯

以下是我最后使用的功能:

var getEventHandlers = function ($object, eventName) {
    var handlers = [],
        eventHandlers = $object.data("events")[eventName];
    if (eventHandlers && eventHandlers.length > 0) {
        for (var i = 0, l = eventHandlers.length; i < l; i++) {
            handlers.push(eventHandlers[i].handler);
        }
    }
    return handlers;
},
setEventHandlers = function ($object, eventName, handlers) {
    if (handlers && handlers.length > 0) {
        for (var i = 0, l = handlers.length; i < l; i++) {
            $object.bind(eventName, handlers[i]);
        }
    }
};
var getEventHandlers=function($object,eventName){
变量处理程序=[],
eventHandlers=$object.data(“事件”)[eventName];
if(eventHandlers&&eventHandlers.length>0){
for(var i=0,l=eventHandlers.length;i0){
for(var i=0,l=handlers.length;i
是否要通过在绑定调用外部定义函数或将其绑定到调用内部的变量来避免引入变量?是的,我只想存储它并临时解除绑定事件。是的,我想存储它以便稍后临时解除绑定并重新绑定。命名选项很好,但我不能始终控制添加的函数。这[0]让我害怕。。。当您准备解除绑定时,您的处理程序可能不在第0个位置