Добавить слушателя событий onlick во внешнем виде не работает js - PullRequest
0 голосов
/ 08 мая 2018

Вот так выглядит мой товар html:

<div class="content__products__item" id="item1">
   <div class="content__products__item__picture">
      <a href="#"><img src="images/product-tea1.jpg"></a>
   </div>
   <div class="content__products__item__section">green tea</div>
   <div><a href="#" class="content__products__item__name">Loan si</a></div>
   <div class="content__products__item__price">
      <span>3.45</span> r
   </div>
   <div class="content__products__item__quantity clearfix">
      <button class="quantity-arrow-minus">-</button>
      <div class="quantity-num"><span>50</span> г</div>
      <button class="quantity-arrow-plus">+</button>
      <button class="quantity-add-to-basket">В корзину</button>
   </div>
   <div class="content__products__item__description-wraper">
      <div class="content__products__item__description">
         Good tea Good teaGood teaGood teaGood tea
      </div>
   </div>
</div>

Я добавляю id к каждому элементу в моей html-разметке, а затем я делаю javascript, я беру все свои элементы и пытаюсь добавить событие onclick для каждого из моих элементов, но не знаю почему, когда я нажимаю на каждую из моих кнопок плюс-минус на любом item он меняет только значение последнего элемента.

var items = document.querySelectorAll('.content__products__item');

for (var i = 1; i < items.length; i++) {
    var btnMinus = document.querySelector('#item' + i + ' .quantity-arrow-minus');
    var btnPlus = document.querySelector('#item' + i + ' .quantity-arrow-plus');
    var input = document.querySelector('#item' + i + ' .quantity-num span');
    var currentPrice = document.querySelector('#item' + i + ' .content__products__item__price span');
    var pricePerGram = currentPrice.textContent / 50;
    btnPlus.onclick = function (e) {
        input.textContent = +input.textContent + 50;
        currentPrice.textContent = (+input.textContent * pricePerGram).toFixed(2);
    }
    btnMinus.onclick = function (e) {
        if (input.textContent > 50) {
            input.textContent = +input.textContent - 50;
            currentPrice.textContent = (+input.textContent * pricePerGram).toFixed(2);
        }
    }
}

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 08 мая 2018

Хорошо, я сделал это так:

var items = document.querySelectorAll('.content__products__item');

  items.forEach(function(item, i) {
    var btnMinus = document.querySelector('#item' + n + ' .quantity-arrow-minus');
    var btnPlus = document.querySelector('#item' + n + ' .quantity-arrow-plus');
    var input = document.querySelector('#item' + n + ' .quantity-num span');
    var currentPrice = document.querySelector('#item' + n + ' .content__products__item__price span');
    var pricePerGram = currentPrice.textContent / 50;
    btnPlus.onclick = function(e) {
      input.textContent = +input.textContent + 50;
      currentPrice.textContent = (+input.textContent * pricePerGram).toFixed(2);
    }
     btnMinus.onclick = function(e) {
       if(input.textContent > 50) {
       input.textContent = +input.textContent - 50;
      currentPrice.textContent = (+input.textContent * pricePerGram).toFixed(2);
       }
    }
  });

Теперь все работает хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...