Почему мое событие click не работает при втором нажатии кнопки?

#javascript #dom-events

#javascript #dom-события

Вопрос:

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

Есть мысли относительно того, почему прослушиватель событий не запускается при втором нажатии.
Это код для добавления прослушивателя событий к каждому модальному. onSubmission это функция, которая выполняет некоторые действия ajax и скрывает текущий модальный параметр, а затем показывает следующий модальный параметр.

 function addSubmitAction(formId) {
    console.log(formId);
    document.querySelector('#modal-submit').addEventListener('click', function _listener() {
        onSubmission({ 'id': formId });
        document.querySelector('#modal-submit').removeEventListener('click', _listener, true);
    }, true);
}
  

Комментарии:

1. Вставляется ли вторая модальная функция динамически? Затем вам нужно снова привязать событие (после его вставки)

2. Все ли ваши модальности одинаковы id ?

3. Похоже, вы удаляете прослушиватель событий, прежде чем получите возможность нажать следующую модальную кнопку. Вам вообще нужно удалять прослушиватель?

4. Добавьте console.log(document.querySelector('#modal-submit')) после console.log(formId) , и я думаю, вы увидите старую модальную кнопку, которая не существует.

5. Второй модал на самом деле точно такой же модал, просто с другими данными. Модальности имеют разные идентификаторы. Поскольку нужен другой идентификатор, мне нужно добавить нового слушателя или, по крайней мере, нужен способ получить идентификатор для функции onSubmission. Я могу использовать jQuery, но стараюсь избегать этого (в основном просто потому, что).

Ответ №1:

может быть, вам нужно получить событие click на корневом узле?

         document.addEventListener('click', ({target}) => {
          if( target.id !== submitId ) return;
          /// your logic
        });
  

пример