После DOMContentLoaded (public/js/eventListeners.js) на каждую кнопку "Добавить в корзину" карточек товара вешается
обработчик на событие "click". При клике на кнопку всплывает модальное окно с формой для выбора цвета, размера и количества и далее
вешается обработчик на кнопку внутри модалки
if (AUTH_USER) modalButton.addEventListener("click", addToCartForAuth.bind(modalButton, [id], 'modalWindow'), {once: true});
else modalButton.addEventListener('click', addToCart.bind(modalButton, [id, category, price], 'modalWindow'), {once: true});
При нажатии на кнопку модалки запустится функция и, в случае если юзер не выбрал какое-то из полей формы, выдаст уведомление с просьбой выбрать все поля.
Но при повторном нажатии на кнопку обработчика уже на ней не будет, так как было {once: true} и она не будет отправлять данные.
Если убрать {once: true}, то на кнопку будет вешаться много одинаковых обработчиков.
Пробовал в случае неудачного исхода внутри функций addToCart или addToCartForAuth (файлы manageCart.js и AJAX.js соответственно) заново вешать обработчик на кнопку, что-то вроде
e.currentTarget.addEventListener('click', addToCart.bind(e.currentTarget, [id, category, price], 'modalWindow'), {once: true})
Почему-то не срабатывало.
Пробовал убирать {once: true} и, в случае удачного исхода событий, в конце исполняемой функции удалять обработчик с кнопки
e.currentTarget.removeEventListener('click', addToCart.bind(e.currentTarget, [id, category, price], 'modalWindow'))
или так...
e.currentTarget.removeEventListener('click', addToCart))
не удаляется.