2013-04-14 2 views
6

Что происходит с событием, когда его элемент был уничтожен? Насколько я знаю, jQuery все еще имеет событие в своем глобальном «хранилище». В моем случае создано множество элементов, связанных с событием и уничтоженных ...Не будут ли события автоматически отключены после уничтожения элемента?

Нужно ли бояться некоторых проблем с памятью после чрезмерного использования?

+2

Если вы удаляете элементы с помощью методов jQuery (например, ['.remove()'] (http://api.jquery.com/remove/)), он также удаляет связанные обработчики событий и (jQuery). – nnnnnn

+0

Очень полезно, спасибо ... – kraftwer1

+0

Кстати, делает ли это также и для дочерних элементов? – kraftwer1

ответ

0

Да. Если у вас есть много обработчиков событий, прикрепленных к элементам html, вам следует либо явно их удалить (используя методы jQuery, такие как remove или empty, а не, например, detach или «regular» js) или изменить стратегию привязки вашего события. То, что я имею в виду, использует делегацию jQuery. Таким образом, вы можете найти какого-то общего предка для своего кластера связанных с событиями элементов и привязать его к событию. Эмпирическое правило всегда должно минимизировать количество обработчиков событий.

+0

Я уверен (но не уверен), что это неправильно. – Dave

+0

@ Давай, но что и почему? Я, конечно, не безошибочный, но это то, что я знаю. Если у вас есть какие-то аргументы против этого, позвольте мне услышать это - это единственный способ узнать, не так ли? – guessimtoolate

+0

Ну, я имею в виду основной момент: «вы должны либо явно удалить их ...». Я не считаю, что это необходимо. См. Источник здесь: https://github.com/jquery/jquery/blob/master/src/manipulation.js#L96 и здесь https://github.com/jquery/jquery/blob/master/src/manipulation. js # L465 (пустой вызван всеми функциями изменения содержимого) – Dave

Смежные вопросы