Реализация счетчика на каждом товаре

function renderElements() {
  const fruitsList = document.getElementById("list");
  fruits.forEach((item) => {
    const child = document.createElement("div");
    child.innerHTML += `
    <div class="main__list-item" id=${item.id}>
        <div class="item__img">
            <img src=${item.img} alt="" />
        </div>
        <div class="item__text1">${item.name}</div>
        <div class="item__text2">${item.description}</div>
        <div class="item__price">${item.price} руб.</div
        <<div class="item__btn">
        <button class="item__btn-add" id="add-${item.id}">+</button>
        <button class="item__btn-delete" id="delete-${item.id}">-</button>
        <div class="fruits__count" id="count-${item.id}">0</div>
        </div>
    </div>`;
    fruitsList.appendChild(child);
  });
}
renderElements();

Есть вот такой код, рендерит карточки товаров. Но как мне реализовать счетчик на каждую кнопку + и - ?


Ответы (1 шт):

Автор решения: ksa

Но как мне реализовать счетчик на каждую кнопку + и - ?

Как вариант - использовать делегирование событий https://learn.javascript.ru/event-delegation

document.querySelector('#list').addEventListener('click', e => {
  const o = e.target.closest('.item__btn-add, .item__btn-delete')
  if (!o) return
  const op = o.closest('.main__list-item').querySelector('.fruits__count')
  let v = o.classList.contains('item__btn-add') ? 1 : -1
  v = +op.textContent + v
  if (v < 0) return
  op.textContent = v
  v = [...document.querySelectorAll('.fruits__count')].reduce((s, o) => {
    s += +o.textContent
    return s
  }, 0)
  document.querySelector('#summ').textContent = v
})
#test {
  position: absolute;
  top: 10px;
  right: 200px;
  border: 1px solid;
}
<p id='test'>Корзина <span id='summ'><span></p>
<ul id ='list'>
  <li class='main__list-item'>
    <button class="item__btn-add">+</button>
    <button class="item__btn-delete">-</button>
    <p class="fruits__count">0</p>
  </li>
  <li class='main__list-item'>
    <button class="item__btn-add">+</button>
    <button class="item__btn-delete">-</button>
    <p class="fruits__count">0</p>
  </li>
  <li class='main__list-item'>
    <button class="item__btn-add">+</button>
    <button class="item__btn-delete">-</button>
    <p class="fruits__count">0</p>
  </li>
  <li class='main__list-item'>
    <button class="item__btn-add">+</button>
    <button class="item__btn-delete">-</button>
    <p class="fruits__count">0</p>
  </li>
  <li class='main__list-item'>
    <button class="item__btn-add">+</button>
    <button class="item__btn-delete">-</button>
    <p class="fruits__count">0</p>
  </li>
</ul>

→ Ссылка