编程新手求助:JS简易计算器仅执行最后一行,是否需用else-if?
嘿,我懂你现在的困扰——不管点哪个运算符按钮,计算器最后都只输出乘法结果,对吧?这是因为你的代码逻辑里有个关键的小疏漏,咱们一步步把它搞定!
问题出在哪?
你现在的代码里,是直接去获取每个按钮的固有value值来做判断的:
var a = document.getElementById("a").value; // 永远是"+" if(a === '+') { ... } // 这个条件永远为真
同理,b的value永远是"-",c的永远是"/",d的永远是"X",所以四个if语句都会依次执行!前面的加法、减法、除法结果会被后面的赋值一次次覆盖,最后就只剩下乘法的结果了。
怎么修正?
核心思路是:捕获用户实际点击的是哪个按钮,然后根据这个按钮的运算符来执行对应的计算。这里给你一个简单易懂的修改方案:
第一步:修改HTML按钮,绑定点击事件
给每个按钮添加onclick事件,点击时把自身的运算符传给calc函数,同时把乘法按钮的value改成JS里标准的*(避免混淆),还要补上显示结果的输入框:
<button id="a" value="+" onclick="calc(this.value)">+</button> <button id="b" value="-" onclick="calc(this.value)">-</button> <button id="c" value="/" onclick="calc(this.value)">/</button> <button id="d" value="*" onclick="calc(this.value)">*</button> <input type="text" id="n1" placeholder="输入第一个数"/> <input type="text" id="n2" placeholder="输入第二个数"/> <input type="text" id="result" placeholder="计算结果" readonly/>
第二步:重写calc函数
让函数接收点击的运算符作为参数,用else-if链式判断(这样只会执行符合条件的分支),同时增加一些错误处理(比如输入非数字、除数为0的情况):
function calc(op) { // 获取输入的两个数值 var n1 = parseFloat(document.getElementById('n1').value); var n2 = parseFloat(document.getElementById('n2').value); var result; // 先检查输入是否为有效数字 if (isNaN(n1) || isNaN(n2)) { alert("请输入有效的数字哦!"); return; // 输入无效就终止函数 } // 根据运算符执行对应计算 if(op === '+') { result = n1 + n2; } else if(op === '-') { result = n1 - n2; } else if(op === '/') { // 除法要额外判断除数不能为0 if (n2 === 0) { alert("除数不能为0呀!"); return; } result = n1 / n2; } else if(op === '*') { result = n1 * n2; } else { alert("无效的运算符!"); return; } // 把结果显示到输入框里 document.getElementById('result').value = result; }
额外说明
- 用
this.value可以直接拿到当前点击按钮的运算符,这样就不用再去逐个获取所有按钮的value了。 else-if的链式结构确保只会执行第一个符合条件的分支,不会出现结果被覆盖的问题。- 增加错误处理能让你的计算器更友好,避免出现莫名其妙的
NaN或者错误结果。
现在你再试试点击不同的按钮,应该就能得到对应的计算结果啦!
内容的提问来源于stack exchange,提问作者cantcodecowboy
相关产品推荐
相关产品推荐

