Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止运算符在计算器中一行显示多次_Javascript_Html_Calculator - Fatal编程技术网

Javascript 防止运算符在计算器中一行显示多次

Javascript 防止运算符在计算器中一行显示多次,javascript,html,calculator,Javascript,Html,Calculator,我用纯JavaScript制作了一个简单的计算器 功能显示(val){ document.getElementById(“结果”).value+=val; } 函数solve(){ 设x=document.getElementById(“结果”).value 设y=eval(x) document.getElementById(“结果”).value=y } 函数clr(){ document.getElementById(“结果”).value=“” } 自动控制 / 7. 8. 9 *

我用纯JavaScript制作了一个简单的计算器

功能显示(val){
document.getElementById(“结果”).value+=val;
}
函数solve(){
设x=document.getElementById(“结果”).value
设y=eval(x)
document.getElementById(“结果”).value=y
}
函数clr(){
document.getElementById(“结果”).value=“”
}

自动控制
/
7.
8.
9
*
4.
5.
6.
-
1.
2.
3.
+
0
.
=

您可以构建一个运算符列表,并将其与输入值和当前结果进行比较

注意:由于eval函数存在安全(和性能)问题,我强烈建议取消eval函数

我还建议使用javascript事件处理程序而不是内联事件处理程序

功能显示(val){
//创建计算器所有运算符的列表
let operators=[…document.querySelectorAll('.operator')].map(el=>el.textContent);
//获取当前值
让resultElement=document.querySelector(“#result”);
让currentResult=resultElement.value;
//当输入是运算符且结果的最后一个字符是运算符时,则覆盖它,否则追加它。
if(运算符.includes(val)和&operators.includes(currentResult.charAt(currentResult.length-1))){
resultElement.value=currentResult.substring(0,currentResult.length-1)+val;
}
否则{
resultElement.value+=val;
}
}
函数solve(){
设x=document.getElementById(“结果”).value
设y=eval(x)
document.getElementById(“结果”).value=y
}
函数clr(){
document.getElementById(“结果”).value=“”
}

自动控制
/
7.
8.
9
*
4.
5.
6.
-
1.
2.
3.
+
0
.
=

您做了哪些尝试来解决此问题?您不应该使用。它有性能和安全问题。好吧,使用逻辑。键入内容时,您正在调用
display
。在该函数中,您可以查看
输入中已有的内容。所以检查最后一个字符;如果是同一个运算符,请不要将运算符添加到
输入
。我们几乎每天都会遇到这样的问题。您可能还希望防止在表达式的开头或结尾使用二进制运算符,处理浮点精度,处理
eval
安全性,等等。这个太宽了。堆栈溢出不是免费的代码编写服务;试着想想你可以如何解决这个问题。使用可用的API和API。@Sebastian Simon:打开devtool控制台也可以做任何事情。如果人们知道该在输入字段中写些什么,他们就知道如何打开控制台。