2011-07-08 23 views
5

如果我附上一個Click事件處理程序:一旦事件綁定在jQuery中,你如何獲得對事件處理函數的引用?

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

?我怎樣才能到函數的引用?這不起作用:

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

我認爲bind("eventname")在這種情況下,僅返回jQuery對象,而不是事件處理函數。它必須存儲在某個地方。

+0

你想避免任何定義函數的綁定調用的外部或綁定到裏面調用一個變量引入變量? – Richard

+0

是的,我只是想存儲它並暫時解除事件。 – travis

回答

6

非常有趣的問題。你可以這樣獲取:

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

請注意,我們使用[0],因爲你有處理程序的數組,如果你綁定多個處理程序。對於其他事件,只需更改爲事件名稱即可。

編輯 一般情況下,你可以使用下面的插件獲取所選元素的所有處理程序的事件(代碼尚未優化):

$.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]; 

希望這有助於。歡呼聲

+0

該插件不是一個壞主意,謝謝! – travis

+0

是[0]讓我害怕......你的處理器可能不會在第0位置由您準備解除綁定的時間 – dsdsdsdsd

5

事件處理程序都保存在一個數據對象,通過data訪問。例如:

$('.selector').data('events').click[0].handler; 

這得到綁定到click事件這個函數的第一個事件處理函數。


如果你想保留這個函數的引用,例如爲了解除綁定,最好將其存儲在一個變量中,或者將其命名爲函數。

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

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

得到更新呵呵呵 –

+0

是的,我會想存儲它暫時解除綁定並重新綁定後。命名選項很好,但我不會始終控制添加的功能。 – travis

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]); 
     } 
    } 
}; 
相關問題