#javascript #html #dom #events #onclick
Вопрос:
Первое if
условие выполняется по желанию несколько раз, но второе и третье условия выполняются только один раз. если щелкнуть по fa-plus-square
элементу, то число увеличивается только один раз, а минус-элемент уменьшается только один раз. Почему она не увеличивается дальше?
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>
Комментарии:
1. Привет, я не уверен, что понимаю, вы просите парня нажать на документ, и вы ищете список классов документа?
2. Если вы нажмете на
.fa-plus-square
этот элемент, он не будет содержать класс.quantity-input
. Итак, первое, что делает ваш слушатель, — это устанавливает значение 1. Затем он увеличивает его на единицу.3. @DafuQi
e.target
-это элемент, на который был нажат, а не элемент, к которому был добавлен прослушиватель событий. Это делегирование событий.4. Он все еще помещает слушателя на всю свою страницу, чтобы проверять только то, что указано в теге «идентификатор: количество»? @Бармар
5. @DafuQi Да, это немного чересчур, но это работает.
Ответ №1:
Сначала вам нужно проверить наличие кнопок «плюс» и «минус» и использовать else if
их, чтобы проверить, не нажимаете ли вы на поле ввода, только если ни одна из них не удалась.
В противном случае, когда вы нажимаете на кнопки «плюс» или «минус», !e.target.classList.contains('quantity-input')
условие выполняется верно, поэтому перед добавлением или вычитанием оно возвращает значение 1.
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>
Комментарии:
1. Также возможно — добавить
.quantity-input
кнопки / -, чтобы они были освобождены от функции сброса. Возможно, потребуется изменить селектор для ввода наinput.quantity-input
2. Спасибо, это сработало. Мне просто нужно было перенести первое условие на последнее в моем коде 🙂