Хотите получить предыдущее значение выбранной кнопки - PullRequest
0 голосов
/ 21 июня 2019
<pre>
   <div class="quantity">
        <input type="number" name="qty" id="qty" value="1" class="form-qty form-control" min="1">
         <div class="quantity-nav">
              <div class="quantity-button quantity-up qty-up">+</div>
              <div class="quantity-button quantity-down qty-down">-</div>
         </div>
    </div>
<pre>

Это цикл.

Я хочу получить входное значение, когда я нажимаю кнопку увеличения и уменьшения количества каждый раз. Есть несколько элементов. Как найти входное значение в JavaScript, нажав кнопку вверх и вниз.

Ответы [ 3 ]

0 голосов
/ 21 июня 2019

Вы можете добавить событие onClick с функцией parents для обнаружения входов рядом с кнопкой.

$(document).on('click','.quantity-up',function(){
  $qtyElemnt = $(this).parents('.quantity').find('.form-qty');
  $qty = $qtyElemnt.val();
  $qtyElemnt.val(Number($qty)+1);
});

$(document).on('click','.quantity-down',function(){
  $qtyElemnt = $(this).parents('.quantity').find('.form-qty');
  $qty = $qtyElemnt.val();
  $qtyElemnt.val(Number($qty)-1);
});
.quantity {
   padding: 10px;
}
.quantity-nav{
    display: inline-block;
}
.quantity-button {
    display: inline-block;
    padding: 5px;
    background-color: #c7c5c5;
    border: 1px solid #585353;
    cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div>
  <div class="quantity">
        <input type="number" name="qty" value="1" class="form-qty form-control" min="1">
         <div class="quantity-nav">
              <div class="quantity-button quantity-up qty-up">+</div>
              <div class="quantity-button quantity-down qty-down">-</div>
         </div>
    </div>
    <div class="quantity">
        <input type="number" name="qty" value="1" class="form-qty form-control" min="1">
         <div class="quantity-nav">
              <div class="quantity-button quantity-up qty-up">+</div>
              <div class="quantity-button quantity-down qty-down">-</div>
         </div>
    </div>
    <div class="quantity">
        <input type="number" name="qty" value="1" class="form-qty form-control" min="1">
         <div class="quantity-nav">
              <div class="quantity-button quantity-up qty-up">+</div>
              <div class="quantity-button quantity-down qty-down">-</div>
         </div>
    </div>
</div>

Спасибо: -)

0 голосов
/ 21 июня 2019

На самом деле вашу проблему довольно легко решить. Попробуйте добавить этот скрипт в конце вашего <body>. Я предлагаю вам также внести некоторые изменения в ваш HTML: используйте <button> или <input type="button" или даже <a> теги для ваших элементов управления. Я добавил логику об атрибутах min / max / step, которые вы можете установить на <input type="number">, но это необязательно. Это зависит от вас, чтобы изменить это.

document.addEventListener("DOMContentLoaded", function() {
  const qtyWraps = document.getElementsByClassName('quantity');
  for (let i = 0; i < qtyWraps.length; i++) {
    const qtyWrap = qtyWraps.item(i);
    const input = qtyWrap.querySelector('.form-qty');
    const up = qtyWrap.querySelector('.qty-up');
    const down = qtyWrap.querySelector('.qty-down');
    const output = qtyWrap.querySelector('.output');
    up.addEventListener('click', function(e) {
      e.preventDefault();
      addValue(1);
    });
    down.addEventListener('click', function(e) {
      e.preventDefault();
      addValue(-1);
    });
    input.addEventListener('input', function() {
      output.textContent = input.value
    });
    const addValue = function(value) {
      const current = parseInt(input.value);
      const min = input.getAttribute('min') || -Infinity;
      const max = input.getAttribute('max') || Infinity;
      const step = input.getAttribute('step') || 1;
      const newValue = Math.min(max, Math.max(min, current + value * step));
      input.value = newValue;
      if (newValue <= min) down.setAttribute('disabled', 'disabled');
      else down.removeAttribute('disabled');
      if (newValue >= max) up.setAttribute('disabled', 'disabled');
      else up.removeAttribute('disabled');
      input.dispatchEvent(new Event('input'));
    }
    addValue(0)
  }
});
.quantity {
  display: block;
  width: 500px;
  margin: auto;
  text-align: center;
}

.quantity .form-qty {
  display: inline-block;
}

.quantity .quantity-nav {
  display: inline-block;
}

.quantity .output {
  background: yellow;
  width: 500px;
  margin: 1em auto 0;
}
<div class="quantity">
  <input type="number" name="qty" id="qty" value="1" class="form-qty form-control" min="1">
  <div class="quantity-nav">
    <button class="quantity-button quantity-up qty-up">+</button>
    <button class="quantity-button quantity-down qty-down">-</button>
  </div>
  <!-- I put it here to show the output result -->
  <div class="output">1</div>
</div>
0 голосов
/ 21 июня 2019

Вы можете использовать localStorage для хранения значения вашего количества, это сделает data постоянным.

Пожалуйста, проверьте фрагмент кода ниже:

const down = document.querySelector('.down');
const up = document.querySelector('.up');
const input = document.querySelector('.quantity');

// store utility function
const store = {
  existsIn: function(key) {
    return this.getFromKey(key) !== null;
  },
  getFromKey: function(key) {
    return window.localStorage.getItem(key);
  },
  add: function(key, value) {
    const storeSource = window.localStorage.setItem(key, value);
  }
}

const quantity = Object.create(store);

quantity.exists = function() {
  return this.existsIn('quantity');
}

quantity.increase = function() {
  let storedQuantity = this.exists() ? parseFloat(this.getFromKey('quantity')) : 0;
  storedQuantity = storedQuantity + 1;
  this.add('quantity', storedQuantity); 
}

quantity.decrease = function() {
  let storedQuantity = this.exists() ? parseFloat(this.getFromKey('quantity')) : 0;
  if(storedQuantity > 0) {
    storedQuantity = storedQuantity - 1;
  }

  this.add('quantity', storedQuantity);
}

quantity.show = function() {
  return this.exists() ? this.getFromKey('quantity') : 0;
}

// event listeners for up and down buttons 
up.addEventListener('click', function() {
  quantity.increase();

  // update input on button click
  input.value = quantity.show();
})

down.addEventListener('click', function() {
  quantity.decrease();

  // update input on button click
  input.value = quantity.show();
})

// update input on page load
input.value = quantity.show();

Там вы можете найти рабочую скрипку: https://jsbin.com/tavalocoti/5/edit?html,js,console,output

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