Я пытаюсь найти лучший способ выполнить несколько вычислений в таблице с 1 фиксированным вводом и 1 переменным вводом от пользователя.
Таблица выглядит следующим образом: Стол
Мой код в HTML выглядит так:
<table class = "accesspoints">
<caption>
Access Points
</caption>
<tr>
<th>Access Point</th>
<th>Power Draw (Watt)</th>
<th>PoE port required</th>
<th>Number installed?</th>
<th>Power consumption</th>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro-max" target = "_blank">U7 Pro Max</a>
</td>
<td class = "powerperdevice">25</td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "apinstalled" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro" target = "_blank">U7 Pro</a>
</td>
<td class = "powerperdevice">21</td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "apinstalled" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro-wall" target = "_blank">U7 Pro Wall</a>
</td>
<td class = "powerperdevice">22</td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "apinstalled" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-outdoor" target = "_blank">U7 Outdoor</a>
</td>
<td class = "powerperdevice">19</td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "apinstalled" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"></td>
</tr>
<!-- Total power consumption for Access Points-->
<tr>
<td></td>
<td></td>
<td></td>
<td class = "totalpower">Total power consumption:</td>
<td class = ""></td>
</tr>
</table>
Я немного не уверен, смогу ли я запрограммировать это на Javascript для расчета общего энергопотребления без отдельных идентификаторов для каждой строки.
Итак, мой вопрос: можно ли заставить Javascript вычислять каждую строку отдельно? А потом в конце просуммировать все 's'?
Впервые пытаюсь задать вопрос, поэтому, если я не понял, дайте мне знать, и я постараюсь предоставить больше данных.
Заранее спасибо!
Мне казалось, что я увидел ответ на этот вопрос сегодня, я даже помню, как редактировал ответ, но сейчас не вижу его.
Однако ниже у меня есть альтернатива, чтобы она не осталась без ответа.
После небольшого изменения элементов таблицы приведенный ниже сценарий вычисляет итоги построчно и соответствующим образом обновляет общий итог.
Вы можете попробовать запустить приведенный ниже фрагмент кода:
const table = document.getElementsByClassName('accesspoints')[0];
const grandTotal = document.getElementsByClassName('grandPowerTotal')[0];
const inputTotals = document.getElementsByName('total');
table.addEventListener('input', ({ target }) => {
const tr = target.closest('tr');
const [power, count, total] = tr.querySelectorAll('input');
total.value=power.value * count.value;
var temp= 0;
for (i=0; i<inputTotals.length; i++){
temp += Number(inputTotals[i].value);
}
grandTotal.innerText= temp;
});
<table class = "accesspoints">
<caption>
Access Points
</caption>
<tr>
<th>Access Point</th>
<th>Power Draw (Watt)</th>
<th>PoE port required</th>
<th>Number installed?</th>
<th>Power consumption</th>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro-max" target = "_blank">U7 Pro Max</a>
</td>
<td class = "powerperdevice"><input type = "text" name = "power" readonly value = "25"></td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "count" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"><input type = "text" name = "total"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro" target = "_blank">U7 Pro</a>
</td>
<td class = "powerperdevice"><input type = "text" name = "power" readonly value = "21"></td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "count" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"><input type = "text" name = "total"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-pro-wall" target = "_blank">U7 Pro Wall</a>
</td>
<td class = "powerperdevice"><input type = "text" name = "power" readonly value = "22"></td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "count" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"><input type = "text" name = "total"></td>
</tr>
<tr>
<td>
<a href = "https://eu.store.ui.com/eu/en/pro/category/all-wifi/products/u7-outdoor" target = "_blank">U7 Outdoor</a>
</td>
<td class = "powerperdevice"><input type = "text" name = "power" readonly value = "19"></td>
<td>PoE+</td>
<td class = "numberofdevices"><input type = "number" name = "count" placeholder = "Number installed?"></td>
<td class = "totalpowerperdevice"><input type = "text" name = "total"></td>
</tr>
<!-- Total power consumption for Access Points-->
<tr>
<td></td>
<td></td>
<td></td>
<td class = "totalpower">Total power consumption:</td>
<td class = "grandPowerTotal">0</td>
</tr>
</table>
Привет, Халук, внимание :) Я попробовал ваш код, но сначала он не сработал, кажется, вы забыли поставить «let» в цикл for. code
for (let i = 0; i < inputTotals.length; i++) { temp += Number(inputTotals[i].value); } code
Это сработало! :)
Привет, Халук, на мой вопрос действительно был дан ответ ранее. Понятия не имею, почему ответ был удален. Однако спасибо за ваш ответ, это другое решение, поэтому мне будет приятно проверить возможные решения и проанализировать ваше решение, чтобы лучше понять!