Задать вопрос
@ImagineWorld

JS привязывает события к элементам один раз при построении дерева или многократно?

Если привязать клик к определенному элементу, например кнопке, загрузить страницу со скриптами и кнопкой, а потом динамически обновить кнопку: удалить и создать заново, с таким же классом,то привязанный к ней клик, после этой манипуляции - сработает снова?
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Stalker_RED
@Stalker_RED
Нет, обработчик привязывается к элементу, и если элемент был удален - обработчик пропадет.
Обойти это можно привязывая обработчик к родительскому элементу, вплоть до document.
Ответ написан
v3shin
@v3shin
Веб-шаман
События привязываются к каждому конкретному элементу, поэтому при удалении элемента удаляется и обработчик события. Но события всплывают: к примеру, клик по кнопке также означает клик по контейнеру кнопки, по контейнеру контейнера и т.д. вплоть до document. Поэтому если вы планируете манипулировать элементами, имеет смысл привязаться к тому элементу, который никуда не денется и разбираться с событиями на его уровне.

document.addEventListener('click', function(e) {
    if (e.target.closest('.myElement')) { ... }
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Benzin102
@Benzin102
Shitcoder
$(document).on('click', '.class', function(){
	//something - сработает
})

$('.class').on('click', function(){
	// something - нет
})
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Если вам надо, чтобы при удалении и создании элемента заново обработчик на нем оставался, то имеет смысл тупо прописать обработчик в соответствующий атрибут. Например:
<button onclick="alert('Проверка');">Нажми меня</button>

Вместо onclick может любой другой обработчик: onhover, onfocus и так далее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы