В jQuery, если вы удалите элемент, будут ли удалены какие-либо события на нем?
-
20-09-2019 - |
Вопрос
Например, если у меня есть ссылка со следующим привязанным к ней событием:
$("a.d").bind("click", this, onDelete);
А позже сделай:
$("a.d").remove();
Это нормально?Или это вызывает утечку памяти, и мне нужно вызвать unbind 1st?
Спасибо за любую помощь.
Решение
Я не проверял это, но считаю, что удаление элемента приведет к отмене привязки его обработчиков событий.Я прихожу к такому выводу из Документация по API jQuery (поиск удаления), в котором говорится, что если вы хотите переместить элемент из одной части DOM в другую, то:
$("#foo").remove().appendTo("#bar");
должно быть написано как
$("#foo").appendTo("#bar");
чтобы не потерять обработчики событий.
Другие советы
Из документов jQuery для удаления()
Удаляет все совпадающие элементы из DOM.Это НЕ удаляет их из объекта jQuery, позволяя вам использовать соответствующие элементы в дальнейшем.Обратите внимание что эта функция, начиная с 1.2.2 , также удалит все обработчики событий и внутренние кэшированные данные.
Ответ — да, если событие было прикреплено С помощью jQuery.Если прикрепить что-то вроде «onclick», я не думаю, что это произойдет.
В этой статье обсуждается кое-что из этого.Он также определяет рекурсивную функцию для удаления всех событий щелчка для элемента и всех его дочерних элементов.Он будет охватывать обработчики кликов jQuery, а также обработчики, определенные с помощью onclick, чтобы вы были охвачены.
http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/
function RecursiveUnbind($jElement) {
// remove this element's and all of its children's click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
Чтобы использовать функцию из предыдущего примера, мы должны вызвать функцию, передав ей «контейнер» div как объект jQuery.
RecursiveUnbind($('#container'));
Для справки: вам не нужно беспокоиться об утечках памяти в JavaScript.(расслабьтесь, чувак, а не C++!)
Механизм JavaScript браузера управляет всеми объектами, а мусор собирает их.Когда я говорю об объектах, это также означает функции обработки событий, поскольку функции также являются объектами в javascript.
Несвязано:Мне нравится, что в JavaScript все является объектом :D
Ваше здоровье!
джрх