Регистрация addEventListener для всех элементов - не лучшее решение. Скажем, у вас есть 100 элементов. Вы бы прислушались к изменениям на всех из них одновременно?
Лучшим решением было бы прослушивать keypress или keydown на document . А затем сузьте его до входов с помощью оператора if.
let questions = {}
let inputs = document.querySelectorAll("input.question")
let pre = document.querySelector("questions")
document.addEventListener("keypress", (event) => {
const input = event.target;
if (input.classList.contains("question")) {
const index = [...input.parentNode.children].indexOf(input)
questions["question" + (index +1)] = input.value
console.log(questions)
}
})
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
<div class="row">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
<input type="text" class="question col-12" name="">
</div>
</div>
Вы можете использовать input.name
вместо "question" + (index +1)
, если у него другое имя.