Как получить доступ к новым созданным элементам?

300
12 мая 2017, 17:06

Добрый день! Не могу разобраться как мне отследить новые элементы. Есть к примеру такая структура

<input type="text" class="count-check">
<div class="inbox">
<div class="item">
  <input type="checkbox">
  <p>Задача 1</p>
</div>

и сам скрипт

const input = document.querySelector('.count-check');
    const checkboxes = document.querySelectorAll('.inbox input')
    const list = document.querySelector('.inbox');
    function displayMatches(){
        let count = this.value;
        let div = document.createElement('div');
      div.className = "item";
      div.innerHTML = `<input type="checkbox">
                                     <p>${count}</p>`
        list.appendChild(div);
        this.value = ""
    }
    function handleCheck(e){
        console.log(e)
    }
    input.addEventListener('change', displayMatches);
    checkboxes.forEach(checkbox => checkbox.addEventListener('click', handleCheck))

Логика следующая: значение из текстового поля создает как бы новый блок с описанием задачи. Не могу понять как мне получить доступ к этим блокам которые были созданы?Эта функция не срабатывает

function handleCheck(e){
        console.log(e)
    }

Она отслеживает только тот элемент который изначально был.

Answer 1

Строка

checkboxes.forEach(checkbox => checkbox.addEventListener('click', handleCheck))

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

Для того, чтобы обработчик сработал на новом созданном элементе, его нужно добавить при создании:

function displayMatches(){
    let count = this.value;
    let div = document.createElement('div');
    div.className = "item";
    div.innerHTML = `<input type="checkbox">
                                 <p>${count}</p>`;
    list.appendChild(div);
    div.querySelector('input').addEventListener('click', handleCheck);
    this.value = ""
}
READ ALSO
Перебор массива вложенного в массив в массиве

Перебор массива вложенного в массив в массиве

Парни, помогите разобраться в следующемЕсть массив

258
Изменить положение google map при загрузке в div

Изменить положение google map при загрузке в div

Использую api google maps для отображение кастомной карты на сайтеСтоит маркер с координатами

275
Как подружить OverlayView и MarkerClusterer?

Как подружить OverlayView и MarkerClusterer?

В одном проекте потребовалось сделать свой HTML маркеры которые реализованы совершенно стандартным кодом который выдает гугл при гуглении,...

320
input file multiple кроссбраузерно

input file multiple кроссбраузерно

Как сделать input type='file' multiple так, чтоб он работал c ie9?

225