ActionEventListener ("щелчок") не работает после вставки другого элемента

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

Кто-нибудь может мне помочь ?

case "status":
        filtersSpace.innerHTML +=
            `<div class = "card border-dark mx-2 my-3" style = "width: 23%;">
                <h5 class = "card-header">Status</h5>
                <div class = "card-body">
                    <tr>
                        <select class = "custom-select mr-sm-2" id = "${'statusInput' + statusFilterCounter.toString(10)}">
                            <option selected value = "Solved">Solved</option>
                            <option value = "Open">Open</option>
                            <option value = "Pending">Pending</option>
                        </select>
                    </tr>
                    <tr>
                        <button type = "button" class = "btn btn-dark my-2" style = "width: 100%;"
                        id = "${'statusActionButton' + statusFilterCounter.toString(10)}">
                            Filter
                        </button>
                        <button type = "button" class = "btn btn-outline-dark my-2" style = "width: 100%;"
                        id = "${'statusCancelButton' + statusFilterCounter.toString(10)}">
                            Cancel
                        </button>
                    </tr>
                </div>
            </div>`;
        defineFilter(
            "status",
            document.getElementById("statusInput" + statusFilterCounter.toString(10)),
            document.getElementById("statusActionButton" + statusFilterCounter.toString(10)),
            document.getElementById("statusCancelButton" + statusFilterCounter.toString(10))
        );
        statusFilterCounter += 1;
        statusLink.disabled = true;
        break;

...

function defineFilter(filterType, input, actionButton, cancelButton) {
actionButton.addEventListener("click",
    function () {
        filters.push({filterType : filterType, value : input.value});
        actionButton.disabled = true;
        print();
        getDataFromJSon();
    }
);
cancelButton.addEventListener("click",
    function () {
        var quantity = this.id.charAt(this.id.length - 1);
        var counter = 0;
        for (var i = 0; i < filters.length; i++){
            if (filters[i].filterType == filterType){
                console.info(">>>");
                if (counter == quantity){
                    filters.splice(i, 1);
                    print();
                    getDataFromJSon();
                    break;
                }
                counter += 1;
            }
        }
        actionButton.disabled = false;
    }
);}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы должны зарегистрировать для нового элемента прослушиватель событий

Ответ принят как подходящий

Используйте делегирование event для динамически добавляемых элементов.

Посмотрите ниже, как мы используем e.target.matches([CSS Selector]), чтобы решить, что делать.

const newAdd = () => {
  const div = document.createElement('div');
  div.innerHTML = `<button class='btn'>Click Me</button>`;
  document.querySelector('.container').appendChild(div);
}

document.addEventListener('click', (e) => {
  if (e.target.matches('.btn')) {
    console.info('I was clicked !!!');
  }
  
  if (e.target.matches('#add')) {
    newAdd();
  }
});
<div class = "container"></div>
<button id = "add">Add</button>

Другие вопросы по теме