Как удалить все обработчики событий Click в Jquery - PullRequest
112 голосов
/ 05 мая 2009

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

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

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

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

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

Ответы [ 5 ]

193 голосов
/ 05 мая 2009

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

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

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

$("#saveBtn").off("click").click(function() { saveQuestion(id); });
13 голосов
/ 05 мая 2009

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

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});
7 голосов
/ 27 апреля 2013
$('#saveBtn').off('click').click(function(){saveQuestion(id)});
2 голосов
/ 05 мая 2009

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

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

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

0 голосов
/ 21 декабря 2016
$('#saveBtn').off('click').on('click',function(){
   saveQuestion(id)
});

Используйте jquery off и on

...