Невозможно добавить EventListener к кнопке, добавленной с помощью EventListener

#javascript #html #events #dom-events #addeventlistener

#javascript #HTML #Мероприятия #dom-события #addeventlistener

Вопрос:

У меня есть две функции, которые перерисовывают часть моей страницы, нажимая на кнопку, каждая из которых после рендеринга должна добавлять eventlistener к нарисованной кнопке.

     showItem () {
        const Id = this.dataset.product_id;
        const ItemBlock = document.getElementById(Id)
        const Template = renderItemNormalView();
        const HTML = Template(ItemBlock.dataset);
        ItemBlock.innerHTML = HTML;
        const editBtn = ItemBlock.querySelector('.js-edit-item');
        editBtn.addEventListener('click', this.showItemEditor);
    }

    showItemEditor () {
        const id = this.dataset.product_id;
        const itemBlock = document.getElementById(id);
        const template = renderItemEditView();
        const HTML = template(itemBlock.dataset);
        itemBlock.innerHTML = HTML;
        const saveChanges = itemBlock.querySelector('.js-save-item-changes');
        saveChanges.addEventListener('click', this.showItem);
    }
  

В первый раз функция showItemEditor вызывается щелчком мыши, но после рендеринга страницы showItem не добавляется как onclick . Я новичок в js, поэтому я не понимаю, в чем может быть проблема.

Ответ №1:

Ну, это было сложно, по крайней мере, для меня. Проблема заключалась в том, что «this» для обеих моих функций был не класс, который их содержит, а кнопки, на которые я пытался нажать onclick, поэтому выражения «this.showItem» и «this.showItemEditor» просто не имели смысла. Я удивлен, что firefox не сказал мне об этом. Но я рад, что все закончилось 🙂