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