时分时间求和计算器输出显示NaN的原因排查技术问询
时间相加代码NaN问题修复
问题根源
你犯了一个基础错误:document.getElementById("first")返回的是输入框DOM元素本身,不是用户输入的内容。把DOM元素转成数字必然得到NaN,导致后续所有计算结果都是NaN。
修复后的完整代码
JavaScript
function add() { // 获取输入框的value值并转为数字,空输入默认设为0 let a = Number(document.getElementById("first").value) || 0; let b = Number(document.getElementById("third").value) || 0; let c = Number(document.getElementById("second").value) || 0; let d = Number(document.getElementById("fourth").value) || 0; let totalMinutes = c + d; let extraHours = Math.floor(totalMinutes / 60); let remainingMinutes = totalMinutes % 60; let totalHours = a + b + extraHours; // 用alert展示结果,避免document.write覆盖页面 alert(`总时长:${totalHours}小时 ${remainingMinutes}分钟`); }
HTML
<h1>Time Calculator</h1> <h2>This calculator can be used to “add” two time values.</h2> Enter hours: <input id="first" type="number" min="0"> Enter Minutes: <input id="second" type="number" min="0" max="59"> Enter hours: <input id="third" type="number" min="0"> Enter Minutes: <input id="fourth" type="number" min="0" max="59"> <button onclick="add()">ADD</button>
额外改进建议
- 给输入框添加
type="number"和范围限制,强制用户输入合法数字,减少异常情况 - 替换
document.write为弹窗或页面内的元素展示结果,原写法会清空整个页面内容 - 可以增加输入校验逻辑,比如提示用户输入有效数字
内容的提问来源于stack exchange,提问作者Zikatro Vizago
相关产品推荐
相关产品推荐

