(Примечание: я использую 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?
Бонусный вопрос: как можно проверить это самостоятельно?