#javascript
#javascript
Вопрос:
У меня есть несколько кнопок, я хотел бы увеличить значение в разных соответствующих входных данных. Я могу заставить все кнопки работать, но они влияют только на первый ввод. Я понимаю, что могу выписать три разные функции для каждой кнопки, но я знаю, что есть способ использовать одну функцию. Заранее благодарим вас за любую помощь!
Вот код для справки:
let submit = document.querySelectorAll(".submit");
let num = document.querySelector(".num");
submit.forEach((btn)=>{
btn.addEventListener("click", increment);
});
let value = 0;
function increment(){
value =1;
num.value = value;
}
<div class="container">
<div class="main">
<button class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"></input> </div>
<button class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"></input> </div>
<button class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"></input> </div>
</div>
</div>
Комментарии:
1. В вашей функции должна быть
event
переменнаяincrement()
. У этого события естьtarget
поле. Попробуйте установить идентификатор для каждой кнопки и идентифицировать цель с помощью этого идентификатора.2. выберите следующий родственный
3. И
<input/>
теги самозакрываются,<input></input>
недопустимый HTML
Ответ №1:
Выберите следующего родственного брата и выберите ввод.
const submit = document.querySelectorAll(".submit");
submit.forEach((btn) => {
btn.addEventListener("click", increment);
});
function increment() {
const inp = this.nextElementSibling.querySelector("input");
inp.value = Number(inp.value) 1;
}
<div class="container">
<div class="main">
<button type="button" class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"> </div>
<button type="button" class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"> </div>
<button type="button" class="submit">Submit</button>
<div class="withinDiv"><input type="number" class="num" value="0"> </div>
</div>
</div>
Комментарии:
1. Это сработало, мне нужно ознакомиться с детьми, братьями и сестрами и этим. Еще раз спасибо!
Ответ №2:
Вот как я бы это сделал — в основном в ваших submit
кнопках «» вы создаете атрибут (в данном случае « for
» (см. Редактирование)), который будет указывать на id
input
подлежащий увеличению. Это дает вам полную гибкость, независимо от того, какой у вас html.
Редактировать
Лучше использовать пользовательский атрибут, например data-for
, кнопка не имеет for
атрибута, как указано в комментариях ниже
let submit = document.querySelectorAll(".submit");
submit.forEach((btn)=>{
btn.addEventListener("click", increment);
});
function increment(ev){
let targetInputId = ev.target.getAttribute("data-for");
let targetInput = document.getElementById(targetInputId);
targetInput.value = parseInt(targetInput.value) 1;
}
<div class="container">
<div class="main">
<button data-for="num1" class="submit">Submit</button>
<div class="withinDiv"><input id="num1" type="number" class="num" value="0"></input> </div>
<button data-for="num2" class="submit">Submit</button>
<div class="withinDiv"><input id="num2" type="number" class="num" value="0"></input> </div>
<button data-for="num3" class="submit">Submit</button>
<div class="withinDiv"><input id="num3" type="number" class="num" value="0"></input> </div>
</div>
</div>
Комментарии:
1.Кнопки не имеют
for
атрибута, но вы можете использовать пользовательскийdata-foobar
(заменитьfoobar
более значимым именем)2. У них нет, но вы все равно можете его использовать, и да, я бы сделал «данные для» на самом деле, просто, знаете ли, набрал прямо из них head — в любом случае «просто для примера».
3. То, что вы можете , не означает, что вы должны писать или советовать людям писать недопустимый HTML
4. Хорошо, позвольте мне это исправить
5. Я вижу, что меня избили 🙂 Я действительно считаю, что это лучшее решение, поскольку оно не сломается, если в HTML будет добавлено больше братьев и сестер.