<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, нажав кнопку вверх и вниз.
Поскольку это цикл, вам нужно знать о повторяющихся идентификаторах... Можете ли вы использовать jQuery lib?
Данный coe не обеспечивает никакого цикла. Что вы пытались «получить входное значение»? Где точно вы застряли?
Вот рабочий пример jsfiddle.net/n6dh34zf Дайте мне знать, если это поможет
Вы можете использовать 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, консоль, вывод
Вы можете добавить событие 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>
Спасибо :-)
На самом деле ваша проблема довольно легко решается.
Попробуйте добавить этот скрипт в конец вашего <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>
Пожалуйста, предоставьте код, чтобы мы могли немного понять, чего вы хотите достичь.