2009-05-05 2 views
102

У меня проблема. В принципе, когда пользователь нажимает на ссылку «Изменить» на странице, следующий код Jquery работает:Как удалить все обработчики событий Click в JQuery

$("#saveBtn").click(function() { 
    saveQuestion(id); 
}); 

Делая это, событие OnClick кнопки сохранения вызывает метод saveQuestion() и передает идентификатор вопрос, для которого была нажата ссылка «Изменить».

Но если в том же сеансе пользователь нажимает кнопку редактирования на 2 вопроса, то вместо того, чтобы перезаписать предыдущий обработчик события click, вместо этого он вызывает 2 обработчики событий для запуска, один, который можно назвать saveQuestion(1), а другой мог бы назвать saveQuestion(2). Делая это, один вопрос перезаписывает другой.

Есть ли способ удалить все предыдущие click событий, которые были назначены кнопке?

ответ

179

Вы могли бы использовать off(), чтобы удалить событие так:

$("#saveBtn").off("click"); 

, но это удалит все события щелчка связанные с этим элементом. Если функция с SaveQuestion является единственной привязкой к событию, то это сделает это. Если не сделать следующее:

$("#saveBtn").off("click").click(function() { saveQuestion(id); }); 
+29

С JQuery 1.7, вы должны использовать и выключать вместо привязки и отвязать –

+0

@LockTar вы можете предложить, как это должно быть начертано вместо этого? –

+0

@JohnMagnolia См. Мои изменения выше. –

13

Есть ли способ удалить все предыдущие события кликов, которые были назначены кнопке?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)}); 
2

Если вы использовали ...

$(function(){ 
    function myFunc() { 
     // ... do something ... 
    }; 
    $('#saveBtn').click(myFunc); 
}); 

... тогда будет легче отвязать позже.

+1

Как вы оцениваете? Независимо от того, как событие элемента связано, они всегда могут быть unbound одинаково ... $ ('# saveBtn'). Unbind ('any event (s)'); Теперь, к RE-BIND ... да, ваша техника может быть проще в определенных обстоятельствах. – KyleFarris

+1

Если вы отвязываете все события click, то это ничем не отличается. Но если вы только хотели отвязать одно конкретное действие, я бы не захотел переписать это событие в двух местах. И, как вы сказали, если я захочу повторить его позже, это снова будет легче сделать, потому что мне не нужно писать функцию в третий раз. –

6
$('#saveBtn').off('click').click(function(){saveQuestion(id)}); 
0
$('#saveBtn').off('click').on('click',function(){ 
    saveQuestion(id) 
}); 

Использование JQuery-х off и on

 Смежные вопросы

  • Нет связанных вопросов^_^