Можно ли удалить все события, связанные с элементом и его дочерними элементами

Мне нужно уметь удалять события, связанные с элементом и всеми его дочерними элементами, даже когда я не знаю, что это за события. Все события привязаны с помощью jquery.

Ответы

Ответ 1

Для jQuery 1.8 и более поздних версий используйте

$(element).find("*").addBack().off();

addBack() добавляет исходный список элементов из $(element) обратно во внутреннюю коллекцию элементов, хранящихся объектом jQuery (те, которые возвращаются find("*")). off() удаляет все прикрепленные обработчики событий, включая те, которые используют делегирование.

Если вы просто хотите детей, а не всех потомков, используйте

$(element).children().addBack().off();

См. документацию:


Для jQuery 1.7 и ниже используйте andSelf() вместо addBack(). Для jQuery 1.6 и ниже используйте unbind() и die() вместо off(). Например:

$(element).children().andSelf().unbind().die();

Ответ 2

Функция

andSelf() устарела.

Используйте функцию add():

$(element).add("*").off();

Ответ 3

Используйте метод .unbind() для элемента.

Ответ 4

Это не ответ, но стоит упомянуть.

Я использовал сторонний плагин без метода destroy. Я нашел это решение, но оно не сработало с самого начала, пока я не начал углубляться в документацию.

Обратите внимание, что если плагин создает прослушиватель $(document).on(event, handler) на вашем объекте, вам нужно удалить действие, написав $(document).off(event, 'element, element *'). Просто запись $(element).find("*").addBack().off(); не будет работать, если основным слушателем является document.