(Примечание: ниже я использую jQuery, но на самом деле вопрос касается общего Javascript.)
Скажем, у меня есть div#formsection
, содержимое которого постоянно обновляется с помощью AJAX, например:
var formSection = $('div#formsection');
var newContents = $.get(/* URL for next section */);
formSection.html(newContents);
Каждый раз, когда я обновляю этот div, я инициирую пользовательское событие, который связывает обработчики событий с некоторыми из вновь добавленных элементов, например:
// When the first section of the form is loaded, this runs...
formSection.find('select#phonenumber').change(function(){/* stuff */});
...
// ... when the second section of the form is loaded, this runs...
formSection.find('input#foo').focus(function(){/* stuff */});
Итак: я привязываю обработчики событий к некоторым узлам DOM, а затем удаляю эти узлы DOM и вставляю новые (это делает html()
) и привязываю обработчики событий к новым узлам DOM.
Удаляются ли мои обработчики событий вместе с узлами DOM, к которым они привязаны? Другими словами, когда я загружаю новые разделы, в памяти браузера накапливается множество бесполезных обработчиков событий, ожидающих событий на Узлы DOM, которые больше не существуют, или они очищаются при удалении их узлов DOM?
Дополнительный вопрос: как это проверить самому?
event.target
, чтобы определить, какая строка была нажата. Это вместо того, чтобы назначать функцию обработчика для каждой новой создаваемой строки. Конечно, это можно абстрагировать (как и в случае с функциейlive
jQuery), но добавленная сложность остается неизменной. - person MooGoo   schedule 03.12.2010