Можно ли удалить все события, связанные с элементом и его дочерними элементами
Мне нужно уметь удалять события, связанные с элементом и всеми его дочерними элементами, даже когда я не знаю, что это за события. Все события привязаны с помощью 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
.