...

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

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

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

0
omg 11 Сен 2009 в 11:04

2 ответа

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

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

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

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

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

5
peirix 11 Сен 2009 в 11:09
В моем приложении некоторые слушатели добавляются html-файлами, загружаемыми $.load(), будут ли они удалены?
 – 
omg
11 Сен 2009 в 11:17

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

Из Manipulation/remove:

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

1
Christian C. Salvadó 11 Сен 2009 в 11:11
Как насчет слушателей, добавленных html-файлом, загруженным $.load()?
 – 
omg
11 Сен 2009 в 11:14