Reputation: 420
The first if
condition is working as desired multiple times but the second and third condition run only once. if the fa-plus-square
element is clicked then the number increases only once and the minus element decrements only once. Why doesn't it increase further?
let input = document.querySelector(".quantity-input");
document.addEventListener('click', function(e) {
if (!e.target.classList.contains('quantity-input')) {
input.value = 1;
}
if (e.target.classList.contains('fa-plus-square')) {
input.value = parseInt(input.value) + 1;
}
if (e.target.classList.contains('fa-minus-square')) {
input.value = parseInt(input.value) - 1;
}
});
<p class="quantity">
<span class="quantity-text">Quantity </span><i class="far fa-minus-square quantity-icon">-</i>
<input type="number" value="1" class="quantity-input" />
<i class="far fa-plus-square quantity-icon">+</i>
</p>
Upvotes: 0
Views: 371
Reputation: 781721
You need to check for the plus and minus buttons first, and use else if
so you only test for not clicking on the input field if neither of those succeeds.
Otherwise, when you click on the plus or minus buttons, the !e.target.classList.contains('quantity-input')
condition is true, so it sets the input back to 1 before adding or subtracting.
let input = document.querySelector(".quantity-input");
document.addEventListener('click', function(e) {
if (e.target.classList.contains('fa-plus-square')) {
input.value = parseInt(input.value) + 1;
}
else if (e.target.classList.contains('fa-minus-square')) {
input.value = parseInt(input.value) - 1;
}
else if (!e.target.classList.contains('quantity-input')) {
input.value = 1;
}
});
<p class="quantity">
<span class="quantity-text">Quantity </span><i class="far fa-minus-square quantity-icon">-</i>
<input type="number" value="1" class="quantity-input" />
<i class="far fa-plus-square quantity-icon">+</i>
</p>
Upvotes: 3