本文详解如何使用现代 javascript(事件委托 + map/reduce)正确实现多个数字输入框的实时求和,避免累加错误、nan 异常及 html 语义问题。
本文详解如何使用现代 javascript(事件委托 + map/reduce)正确实现多个数字输入框的实时求和,避免累加错误、nan 异常及 html 语义问题。
在 Web 表单开发中,常见的需求是:当用户在多个 <input> 中输入数字时,页面自动实时计算总和并显示在指定位置。但初学者常陷入一个典型陷阱——在事件监听器内反复累加(如 tot += ...),导致每次输入都基于上一次的累计值继续叠加,形成类似 1→3→6→10... 的错误算术增长。
根本原因在于原始代码中:
✅ 正确解法采用事件委托 + 函数式编程思想:
以下是推荐实现代码:
<div id="scoreContainer"> <p><input type="number" class="score" id="myInputField12" /></p> <p><input type="number" class="score" id="myInputField13" /></p> <p><input type="text" class="result" id="total" readonly /></p></div>
const scoreContainer = document.getElementById('scoreContainer');const fields = scoreContainer.querySelectorAll('.score');const totalField = document.getElementById('total');scoreContainer.addEventListener('input', () => { const sum = [...fields].map(field => { const num = +field.value; return isNaN(num) ? 0 : num; }).reduce((acc, curr) => acc + curr, 0); // 初始值设为 0,确保空数组返回 0 totalField.value = sum;});
? 关键注意事项:
该方案简洁、高效、无副作用,完美解决“越输越大”的逻辑 bug,是现代前端实时计算的推荐范式。
Tplink路由器管理界面无法进入(如何解决Tplink路由器管理界面无法进入的问题)
如何通过Tplink路由器App添加设备(Tplink路由器App添加设备指南)
Tplink路由器App禁用设备功能详解(Tplink路由器App禁用设备查看指南)
如何正确安装Tplink路由器(Tplink路由器安装指南)
TPLink F80E路由器是哪个年代的产品(TPLink F80E路由器的生产年份是什么)
TPLink AC1900路由器的设置方法是什么(如何设置TPLink AC1900路由器)