2012-06-21 80 views
3

好吧,假設我有一個按鈕,並且想要啓用/禁用其點擊處理程序。在Javascript中啓用/禁用按鈕單擊處理程序

我想這樣的創建函數:

var bar = []; 
function storeHandlers(buttonID) { 
    //I would like to store the click handlers in bar[buttonID] 
} 

function preventHandlers(buttonID) { 
    storeHandlers(buttonID); 
    //I would like to disable all the click handlers for button 
} 

function loadHandlers(buttonID) { 
    //I would like to enable all the handlers loaded from bar[buttonID] 
} 

這可能嗎?我怎樣才能做到這一點?

預先感謝您

+0

您可以命名空間的事件處理程序,並啓用/處理程序的方式禁用組。 –

回答

1

就試試這個:

function preventClick(buttonID) { 
    $('#'+buttonID).data('events').saved_click = $('#'+buttonID).data('events').click; 
    $('#'+buttonID).data('events').click = null; 
} 

function allowClick(buttonID) { 
    $('#'+buttonID).data('events').click = $('#'+buttonID).data('events').saved_click; 
} 

就是這樣!

的jsfiddle例如:http://jsfiddle.net/cec6z/9/

+0

這看起來像一個不錯的解決方案。 –

2

據我知道你不能存儲/從元素只是ID檢索事件處理程序,您必須手動存儲那些在創建處理程序。但是你可以on/off處理像以下

function preventHandlers(buttonID) { 
    $('#'+buttonID).off('click',bar[buttonID]); 
} 

function loadHandlers(buttonID) { 
    $('#'+buttonID).on('click',bar[buttonID]); 
} 

而且你可以將它們存儲像

bar[buttonID] = function(event){ 

}; 

UPDATE:

雖然答案在這裏How to debug JavaScript/jQuery event bindings with Firebug (or similar tool)這裏How to find event listeners on a DOM node when debugging or from the JavaScript code?和其他人說,.date('events')返回所有事件處理程序,我無法使其工作。

我已經用上述方法設置了一個例子。赤下面的鏈接

Working Fiddle

+0

+1如果我可以禁用它們並啓用它們,但不存儲它們非常好,我甚至不敢希望這是可能的。 –

+0

我必須測試你的想法。 –

+0

@LajosArpad,我已經添加了一個例子。 –

0

也許我錯了,但我不認爲你可以從一個jQuery對象中的所有事件回調諸如此類

var handlers = $('#buttonId').unbind('click')