Как удалить все обработчики событий Click в Jquery

StackOverflow https://stackoverflow.com/questions/825112

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

  

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

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

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

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

... тогда потом будет легче отменить привязку.

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

Используйте jaquery off и на

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top