Size: a a a

JavaScript Noobs — сообщество новичков

2020 July 22

๖ۣYakub๖ۣۜ in JavaScript Noobs — сообщество новичков
Это шутка не надо мне бан
источник

K

Kirill in JavaScript Noobs — сообщество новичков
updateCartTotal(price) {
   let priceEl = parseFloat(price.replace('$', ''));
   let quantity = 0;
   const quantityElement = document.querySelectorAll('.cart-quantity-input');
   quantityElement.forEach((el) => {
       el.addEventListener('input', () => {
         quantity = parseFloat(el.value);
         total = total + priceEl;
         document.querySelector('.cart-total').innerText = total;
       });
       console.log(cart);
   });
}

При вызове updateCartTotal quantityElement вызывается несколько раз, то есть при каждом вызове + 1 раз. Я кнопкой вызываю первый раз, функция вызывается один раз и в консоль выводится один раз, второй раз в консоль будет выводится все те же данные, только уже 2 раза и так далее. Вот пример с консоли. В чем проблема? Должно вызываться по одному разу при каждом клике, а не по нарастающей
источник

D

Danila in JavaScript Noobs — сообщество новичков
๖ۣYakub๖ۣۜ
Это шутка не надо мне бан
Смешная шутка
источник

D

Danila in JavaScript Noobs — сообщество новичков
Kirill
updateCartTotal(price) {
   let priceEl = parseFloat(price.replace('$', ''));
   let quantity = 0;
   const quantityElement = document.querySelectorAll('.cart-quantity-input');
   quantityElement.forEach((el) => {
       el.addEventListener('input', () => {
         quantity = parseFloat(el.value);
         total = total + priceEl;
         document.querySelector('.cart-total').innerText = total;
       });
       console.log(cart);
   });
}

При вызове updateCartTotal quantityElement вызывается несколько раз, то есть при каждом вызове + 1 раз. Я кнопкой вызываю первый раз, функция вызывается один раз и в консоль выводится один раз, второй раз в консоль будет выводится все те же данные, только уже 2 раза и так далее. Вот пример с консоли. В чем проблема? Должно вызываться по одному разу при каждом клике, а не по нарастающей
>В чем проблема?

В том, что ты вешаешь обработчик. Сколько раз кликнешь столько раз повесишь обработчик.
источник

D

Danila in JavaScript Noobs — сообщество новичков
>el.addEventListener
источник

K

Kirill in JavaScript Noobs — сообщество новичков
Так по сути я должен вешать обработчик на каждый разный el. QuantityElement генерируется динамически через templateLiterals  и  я просто перебираю их все и вешаю на каждый
источник

K

Kirill in JavaScript Noobs — сообщество новичков
Переслано от Danila
>В чем проблема?

В том, что ты вешаешь обработчик. Сколько раз кликнешь столько раз повесишь обработчик.
источник

D

Danila in JavaScript Noobs — сообщество новичков
Kirill
Так по сути я должен вешать обработчик на каждый разный el. QuantityElement генерируется динамически через templateLiterals  и  я просто перебираю их все и вешаю на каждый
updateCartTotal вызывается только один раз?
источник

K

Kirill in JavaScript Noobs — сообщество новичков
при каждом добавлении товара в корзину
источник

D

Danila in JavaScript Noobs — сообщество новичков
Kirill
при каждом добавлении товара в корзину
Тогда я не понимаю в чём вопрос. Ты при каждом добавлении в корзину проходишься по всем инпутам и вешаешь на них обработчики
источник

D

Danila in JavaScript Noobs — сообщество новичков
При следующем добавлении ты опять идёшь  вешаешь ещё обработчики
источник

D

Danila in JavaScript Noobs — сообщество новичков
Получается уже по два обработчика
источник

D

Danila in JavaScript Noobs — сообщество новичков
И так далее
источник

D

Danila in JavaScript Noobs — сообщество новичков
Не вешай.
источник

D

Danila in JavaScript Noobs — сообщество новичков
Вешай не там
источник

K

Kirill in JavaScript Noobs — сообщество новичков
Есть ли какой-то способ при каждом вызове проходить по инпутам и смотреть есть ли на нем обработчик, если есть, то пропустить и добавить в обратном случае?
источник

K

Kirill in JavaScript Noobs — сообщество новичков
Переслано от Danila
Тогда я не понимаю в чём вопрос. Ты при каждом добавлении в корзину проходишься по всем инпутам и вешаешь на них обработчики
источник

D

Danila in JavaScript Noobs — сообщество новичков
Kirill
Есть ли какой-то способ при каждом вызове проходить по инпутам и смотреть есть ли на нем обработчик, если есть, то пропустить и добавить в обратном случае?
Нет. И не нужно, потому что ты делаешь это неправильно
источник

D

Danila in JavaScript Noobs — сообщество новичков
Зачем тебе при каждом добавлении в корзину проходить по всем инпутам?
источник

AP

Anton Permyakov in JavaScript Noobs — сообщество новичков
Kirill
Есть ли какой-то способ при каждом вызове проходить по инпутам и смотреть есть ли на нем обработчик, если есть, то пропустить и добавить в обратном случае?
вешай один обработчик на родителя и проверяй event.target
источник