Мне нужно отключить события в jQuery, когда я удаляю элементы
У меня есть пользовательский интерфейс с динамическими вкладками, поэтому содержимое можно загружать в вкладку, а затем вкладку можно закрыть и содержимое удалено со страницы.
Когда я загружаю содержимое на вкладку, я добавляю много событий к элементам с помощью jQuery.
Что происходит, когда я удаляю эти элементы со страницы? Должен ли знать jQuery?
Кроме того, имеет значение, если я присоединяю событие несколько раз? Например, в моей загрузке вкладки я мог бы присоединить событие, используя селектор классов, например $('.submitButton').click(...)
. Но у меня, возможно, уже есть другие вкладки, которые уже были связаны с приложением submitButton. В этом случае я буду повторно присоединять одно и то же событие. Есть ли проблемы с этим?
Ответы
Ответ 1
Если вы используете методы jQuery .remove()
или .empty()
, они очистят все события (и другие данные), которые были назначены с помощью jQuery.
Из документов для remove():
В дополнение к самим элементам все связанные события и данные jQuery, связанные с элементами, удаляются.
и для empty():
Чтобы избежать утечек памяти, jQuery удаляет из дочерних элементов другие конструкторы, такие как данные и обработчики событий, перед удалением самих элементов.
Если вы использовали встроенные методы удаления API, все эти данные будут зависать. Поэтому лучше использовать методы jQuery.
Ответ 2
Если вы удалите элемент с . remove() все связанные события и данные jQuery, связанные с элементом, удаляются.
Кроме . detach(), который удалит элемент из DOM, но сохранит все связанные данные и события в памяти (что полезно, если вы хотите повторно вставить этот элемент позднее)