Нужно ли отсоединять события в jQuery при удалении элементов - PullRequest
14 голосов
/ 06 июля 2010

У меня есть пользовательский интерфейс с использованием динамических вкладок, поэтому содержимое можно загружать на вкладку, а затем вкладку можно закрыть и удалить содержимое со страницы.

Когда я загружаю контент во вкладку, я присоединяю множество событий к элементам, используя jQuery.

Что происходит, когда я удаляю эти элементы со страницы? Нужно ли знать jQuery?

Кроме того, имеет ли значение, если я присоединяю событие несколько раз? Например, в загрузке моей вкладки я могу прикрепить событие с помощью селектора классов, например $('.submitButton').click(...). Но у меня уже могут быть открыты другие вкладки, к которым уже прикреплено событие submitButton. В этом случае я снова присоединю то же самое событие. Есть ли проблемы с этим?

Ответы [ 2 ]

16 голосов
/ 06 июля 2010

Если вы используете методы jQuery .remove() или .empty(), они очистят все события (и другие данные), назначенные с помощью jQuery.

Из документов для удаления ():

В дополнение к самим элементам удаляются все связанные события и данные jQuery, связанные с элементами.

и для пустых ():

Чтобы избежать утечек памяти, jQuery удаляет другие конструкции, такие как данные и обработчики событий, из дочерних элементов перед удалением самих элементов.

Если вы использовали собственные методы удаления API, все эти данные будут зависать. Так что лучше использовать методы jQuery.

3 голосов
/ 06 июля 2010

При удалении элемента с помощью .remove () все связанные события и данные jQuery, связанные с элементом, удаляются.

Кроме .detach () , который удаляет элемент из DOM, но сохраняет все связанные данные и события в памяти (что полезно, если вы хотите повторно вставить этот элемент позже время)

...