Будут ли слушатели удалены, когда мы вызовем $.remove() в jQuery?

...

Есть слушатели на $('#target') и его дочерних элементах.

Когда мы вызываем $('#target').remove(), чтобы удалить его из DOM, будут ли удалены слушатели?

Если нет, то как удалить их вместе?


person omg    schedule 11.09.2009    source источник


Ответы (2)


Зависит от того, как вы добавляете слушателей. Если вы сделаете

$("#target").click(function() { doSomething(); });

Затем remove() также удалит прослушиватель. Однако, если вы сделаете:

$("#target").live("click", function() { doSomething(); });

Слушатель не будет удален. Что вы сделали здесь, так это создали живую коллекцию HTML, и если вы позже добавите новый элемент с идентификатором «target», он добавит к нему этого слушателя.

person peirix    schedule 11.09.2009
comment
В моем приложении некоторые слушатели добавляются html-файлами, загружаемыми $.load(), будут ли они удалены? - person omg; 11.09.2009

Да, непосредственно связанные обработчики событий и внутренние кэшированные данные будут удалены.

Из Manipulation/remove:

«Обратите внимание, что эта функция, начиная с 1.2.2, также удалит все обработчики событий и данные из внутреннего кэша».

person Christian C. Salvadó    schedule 11.09.2009
comment
Как насчет слушателей, добавленных html-файлом, загруженным $.load()? - person omg; 11.09.2009