2012-06-21 3 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') 
Смежные вопросы