Как сделать 3 калькулятора расчета на одной странице? (JAVASCRIPT)
В примере указаны три калькулятора на одной странице. Нужно чтобы они работали независимо друг от друга, то есть по отдельности был вывод результата в "Итого". У меня работает только первый калькулятор почему-то, остальные не реагируют. Очень нужна ваша помощь, в этом деле новичок!
var lastId = 9; // номер последнего inputa
let res = document.getElementById('result');
function calc2() {
var price = 0;
inputs = document.querySelectorAll('input, select');
for (var i = 0; i < inputs.length; i += 2) { // посчитаем сумму всех инпутов
price += inputs[i].value * inputs[i + 1].value;
inputs[i].addEventListener('change', calc2);
}
res.innerHTML = price;
}
function addQuestion() {
var d = document;
let inputs = document.querySelectorAll('input');
for (var i = 0; i < inputs.length; i++) {
inputs[i].addEventListener('change', calc2);
}
var newdiv = d.createElement("div");
newdiv.innerHTML = `<div class="line1">
<div class="label-cal">
<label class="ttll" for>Следующая панель</label>
</div>
<span class="nn">
<input class="num" id="num${++lastId}" type="number" value="0" name="">
x
<input class="num" id="num${++lastId}" type="number" value="0" name="">
см
</span>
</div> `;
document.getElementById("parentId").appendChild(newdiv);
inputs = document.querySelectorAll('input');
for (var i = 0; i < inputs.length; i++) {
inputs[i].addEventListener('change', calc2);
}
};
let input = document.getElementById('num');
let input2 = document.getElementById('num2');
let input3 = document.getElementById('num3');
let input4 = document.getElementById('num4');
let inputs = document.querySelectorAll('input, select');
for (var i = 0; i < inputs.length; i++) {
inputs[i].addEventListener('change', calc);
}
function calc() {
var price = 0;
price += parseInt(input.value) * parseInt(input2.value);
price += parseInt(input3.value) * parseInt(input4.value);
res.innerHTML = price;
}
<section id="calculator">
<div class="container">
<div class="wr">
<div class="cal-1">
<div class="line1">
<div class="label-cal">
<label class="ttll" for>1-я панель</label>
</div>
<span class="nn">
<input class="num" id="num" type="number" value="0" name="">
x
<input class="num" id="num2" type="number" value="0" name="">
см
</span>
</div>
<div class="line1">
<div class="label-cal">
<label class="ttll" for>2-я панель</label>
</div>
<span class="nn">
<input class="num" id="num3" type="number" value="0" name="">
x
<input class="num" id="num4" type="number" value="0" name="">
см
</span>
<div class="btn-cal" id="add" onclick="addQuestion()">Добавить</div>
</div>
<div id="parentId"></div>
<hr>
<div class="cal-line">
<span class="line-label">Итого</span>
<span class="byn2"> руб</span>
<span class="byn2" id="result">0</span>
</div>
</div>
</div>
</section>
<section id="calculator">
<div class="container">
<div class="wr">
<div class="cal-1">
<div class="line1">
<div class="label-cal">
<label class="ttll" for>1-я панель</label>
</div>
<span class="nn">
<input class="num" id="num" type="number" value="0" name="">
x
<input class="num" id="num2" type="number" value="0" name="">
см
</span>
</div>
<div class="line1">
<div class="label-cal">
<label class="ttll" for>2-я панель</label>
</div>
<span class="nn">
<input class="num" id="num3" type="number" value="0" name="">
x
<input class="num" id="num4" type="number" value="0" name="">
см
</span>
<div class="btn-cal" id="add" onclick="addQuestion()">Добавить</div>
</div>
<div id="parentId"></div>
<hr>
<div class="cal-line">
<span class="line-label">Итого</span>
<span class="byn2"> руб</span>
<span class="byn2" id="result">0</span>
</div>
</div>
</div>
</section>
<section id="calculator">
<div class="container">
<div class="wr">
<div class="cal-1">
<div class="line1">
<div class="label-cal">
<label class="ttll" for>1-я панель</label>
</div>
<span class="nn">
<input class="num" id="num" type="number" value="0" name="">
x
<input class="num" id="num2" type="number" value="0" name="">
см
</span>
</div>
<div class="line1">
<div class="label-cal">
<label class="ttll" for>2-я панель</label>
</div>
<span class="nn">
<input class="num" id="num3" type="number" value="0" name="">
x
<input class="num" id="num4" type="number" value="0" name="">
см
</span>
<div class="btn-cal" id="add" onclick="addQuestion()">Добавить</div>
</div>
<div id="parentId"></div>
<hr>
<div class="cal-line">
<span class="line-label">Итого</span>
<span class="byn2"> руб</span>
<span class="byn2" id="result">0</span>
</div>
</div>
</div>
</section>
Ответы (1 шт):
Автор решения: another_login
→ Ссылка
Не идеальный вариант, но принцип, думаю, будет понятен:
let inputs = document.querySelectorAll('input[type=number]');
let output1 = document.getElementById('res1');
let output2 = document.getElementById('res2');
let output3 = document.getElementById('res3');
inputs.forEach(el => el.addEventListener('change', function(){result(this);}));
function result(el) {
const base = parseInt(el.value);
let res;
switch (el.id) {
case 'first':
res = parseInt(base) * 2;
output1.innerText = `${base} x 2 = ${res}`;
break;
case 'second':
res = parseInt(base) * 3;
output2.innerText = `${base} x 3 = ${res}`;
break;
case 'third':
res = parseInt(base) * 10;
output3.innerText = `${base} x 10 = ${res}`;
break;
}
}
body {
display: grid;
justify-content: center;
}
<input id='first' type='number' value='0'>
<span id='res1'>0</span>
<input id='second' type='number' value='0'>
<span id='res2'>0</span>
<input id='third' type='number' value='0'>
<span id='res3'>0</span>