Плюсовать значение при событии

239
05 ноября 2017, 19:53

Есть javascript:

$(document).on('click', '.plus-minus button', function() { 
  var btn = $(this), 
    oldValue = btn.closest('.plus-minus').find('input').val().trim(), 
    newVal = 1; 
  if (btn.attr('data-dir') == 'up') { 
    newVal = parseInt(oldValue) + 1; 
  } else { 
    if (oldValue > 1) { 
      newVal = parseInt(oldValue) - 1; 
    } else { 
      newVal = 1; 
    } 
  } 
  btn.closest('.plus-minus').find('input').val(newVal); 
});

Смысл в том, что на странице интернет-магазина при нажатии кнопок + или - добавляется или уменьшается количество товара в поле input. Но он добавляет всегда +1 или -1 к текущему значению. Как переписать его так, чтобы он прибавлял к старому значению это же значение каждый раз?

Пример: первоначальное значение = 2. Нажимаем + и добавляется количество товара +2 (в итоге получается 4), нажимаем еще + и добавляется первоначальное значение к текущему (4+2) в итоге получаем 6. С вычитанием такая же логика должна быть - вычитать самое первое значение. Пробовал просто суммировать каждый раз oldValue + oldValue , но получается что он каждый раз его удваивает.

Answer 1

Попробуйте так:

var vl = false;
$(document).on('click', '.plus-minus button', function() {
  var btn = $(this),
    oldValue = btn.closest('.plus-minus').find('input').val().trim(),
    newVal = vl || oldValue;
  vl = newVal;
  if (btn.attr('data-dir') == 'up') {
    newVal = parseInt(oldValue) + 1;
  } else {
    if (oldValue > 1) {
      newVal = parseInt(oldValue) - 1;
    } else {
      newVal = 1;
    }
  }
  btn.closest('.plus-minus').find('input').val(newVal);
});
READ ALSO
Как заменить forEach() на map()?

Как заменить forEach() на map()?

Помогите пожалуйста переписать кусочек кода:

230
Принять JSON на стороне JS

Принять JSON на стороне JS

Добрый деньВозникла такая проблема

250