Возникла проблема с peoplePaid(), проходящим через все входы с классом .persons на странице с помощью кнопки добавления. Я считаю, что эта проблема заключается в том, что #paidTotal пытается добавить содержимое из массива в .persons, но не может получить к нему доступ (дает мне неопределенную ошибку в консоли).
Эта переменная работает, но только если есть один класс .persons с переменной ...
var personsCheck = parseFloat(document.getElementsByClassName('persons')[0].value);
Однако мне нужно, чтобы он динамически зацикливал значения массива, созданного с помощью элементов .persons. Что мне не хватает?
function peoplePaid() {
var checkTotal = parseFloat(document.getElementById('check').value);
var personsCheck = document.getElementsByClassName('persons');
var paidTotal = document.getElementById('paidTotal');
for (var i = 1; i < personsCheck.length; i += 1) {
paidTotal += personsCheck[i];
}
paidTotal.innerHTML = checkTotal - personsCheck;
}$ <input type = "text" id = "check" value = "" />
<h3>Number of People: <span id = "numberOfPeople"></span></h3>
<div>
<div id = "userNumbers">
<input type = "text" class = "persons" name = "person">
</div>
</div>
<button onclick = "peoplePaid()">Calculate</button>
<!--Paid Amount-->
<div>
<h3>Paid Amount: <span id = "paidTotal"></span></h3>
</div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


paidTotal - это элемент. Я считаю, что вы не хотите использовать += в самом элементе. Вы должны добавить сумму к переменной.
Кроме того, поскольку индекс коллекций основан на 0, вы должны начинать значение i с 0. Вы должны взять свойство value из каждого элемента.
Пожалуйста, обрати внимание: При работе с текстовым контентом рекомендуется использовать textContent вместо innerHTML.
Попробуйте следующий способ:
function peoplePaid() {
var checkTotal = parseFloat(document.getElementById('check').value);
var personsCheck = document.getElementsByClassName('persons');
var paidTotal = document.getElementById('paidTotal');
var pCheck = 0;
for (var i = 0; i < personsCheck.length; i += 1) {
pCheck += personsCheck[i].value;
}
paidTotal.textContent = checkTotal - pCheck;
}$ <input type = "text" id = "check" value = "" />
<h3>Number of People: <span id = "numberOfPeople"></span></h3>
<div>
<div id = "userNumbers">
<input type = "text" class = "persons" name = "person">
</div>
</div>
<button onclick = "peoplePaid()">Calculate</button>
<!--Paid Amount-->
<div>
<h3>Paid Amount: <span id = "paidTotal"></span></h3>
</div>В вашем коде есть ошибки:
paidTotal - это элемент, но в paidTotal += personsCheck[i]; вы использовали его как числовую переменную.paidTotal += personsCheck[i]; вы добавили элемент personsCheck[i] в paidTotal вместо его значения.исправленный код выглядит так:
function peoplePaid() {
var checkTotal = parseFloat(document.getElementById('check').value);
var personsCheck = document.getElementsByClassName('persons');
var paidTotal = 0;
for (var i = 0; i < personsCheck.length; i += 1) {
paidTotal += personsCheck[i].value * 1;
}
document.getElementById('paidTotal').innerHTML = checkTotal - paidTotal;
}$ <input type = "text" id = "check" value = "" />
<h3>Number of People: <span id = "numberOfPeople"></span></h3>
<div>
<div id = "userNumbers">
<input type = "text" class = "persons" name = "person">
</div>
</div>
<button onclick = "peoplePaid()">Calculate</button>
<!--Paid Amount-->
<div>
<h3>Paid Amount: <span id = "paidTotal"></span></h3>
</div>
Потрясающие. Спасибо!