Задать вопрос
Vextor-ltd
@Vextor-ltd
Webdeveloper

Почему не работает событие на элементе, созданном в рамках шаблона при помощи другого события JavaScript?

Написал функцию, которая из массива объектов собирает данные, подставляет их в шаблон и аппендит его в секцию DOM-а.
В массиве несколько объектов с данными.
Задача вывести первый шаблон, полученный из первого объекта массива сразу когда DOMContentLoaded - я просто при загрузке страницы запускаю данную функцию. А далее при клике на ссылку "Показать следующий" выводить шаблон, полученный из следующего объекта данного массива объектов, ну и так далее выводить по одному следующие шаблоны.
В шаблоне присутствует элемент objectDescriptionLink, на который подвешено событие click, в котором, например, прописано alert('Yo!');
Так вот загвоздка в том, что это событие срабатывает только на первом созданном шаблоне, который генерился при DOMContentLoaded.
На остальных шаблонах событие -
objectDescriptionLink.addEventListener('click', () => {
	alert ('Yo!!!');
});

НЕ СРАБАТЫВАЕТ !!!
Проверял инспектором - ошибок в сгенерированных шаблонах нет.
Однако инспектор показывает, что в первом шаблоне на элементе objectDescriptionLink висит event, а на остальных, сгенерированных по событию click ("Показать следующий") ивента на их элементе objectDescriptionLink нет! Как будто они в DOM не попадают, но ведь инспектор их видит и они выводятся на странице! А ивента на элементе objectDescriptionLink в них нет!
Чтобы было понятней, лайт кодинг примерно такой:
// Есть некий массив объектов
const objectsArr = [{'name: 'Вася', age: 32, discription: 'Lorem...'}, {'name: 'Петя', age: 27, discription: 'Lorem...'}, {'name: 'Федя', age: 41, discription: 'Lorem...'}];
document.addEventListener("DOMContentLoaded", () => {
    const objectTemplate = () => { ... }
    objectTemplate();
    showAnotherOne.addEventListener('click', (event) => {
        preloader.style.display = 'block';
        objectTemplate();
    });
    const objectDescriptionLink = document.querySelector('.object-description-link');
    objectDescriptionLink.addEventListener('click', (event) => {
        alert ('Yo!!!');
        console.log(event.target);
    });
}

При первом вызове objectTemplate() событие внутри шаблона работает, при последующих нет.
В чём тут проблема?
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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