@khodos_dmitry

Kак добавить addeventlistener к кнопке, которая создается с помощью js?

Пытался так:
let save_calculation = document.getElementsByClassName('save_calculation');
for (let i = 0; i < save_calculation.length; i++) {
    save_calculation[i].addEventListener('click', function() {
        alert("Скопировано в буфер обмена.");
    });
}

но не работает. Хотя getElementsByClassName создает живую коллекцию.
Остается только аттрибут onclick?
  • Вопрос задан
  • 1733 просмотра
Решения вопроса 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Если нужно отслеживать одно событие на нескольких однотипных элементах, часть из которых создаётся позже, можно сделать так:
// Некий контейнер в котором нужно отслеживать элементы
const container = document.body.querySelector('.container')

// Навешиваем ОДИН обработчик на весь контейнер
container.addEventListener('click', event => {
  // если кликнули не на тот элемент что нам нужен — выходим
  if (!event.target.matches('button, button *')) {
    return
  }
  
  // Кликнули на какую-то кнопку внутри контейнера. Даже если эта кнопка была добавлена позже, после навешивания обработчика
  // Что-то делаем ...
})


Ответ написан
@sobolay
А нельзя ли навешивать обработчик на кнопки, когда они создавались (возможно, с промежуточным сохранением в какой-н глобальной переменной). Это позволило бы их потом не разыскивать с помощью document.getElementsByClassName
let container = document.querySelector(".container"),
  	newButton = document.createElement('button');

   newButton.innerText = 'Кликни для запуска обработчика';
   newButton.addEventListener('click', event => {
	  alert('Вы кликнули на кнопку');
   });
  container.appendChild(newButton);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы