javascript中的函数不';一旦被触发就不能工作?
我正在从头开发一个香草javascript计算器。我能够完成数字和操作之间的分离,但一旦我将数组传递给另一个函数,该函数就因为某种原因根本无法工作。请注意,我是一名自学者,也是一名javascript初学者,所以我正在学习和练习。守则:javascript中的函数不';一旦被触发就不能工作?,javascript,Javascript,我正在从头开发一个香草javascript计算器。我能够完成数字和操作之间的分离,但一旦我将数组传递给另一个函数,该函数就因为某种原因根本无法工作。请注意,我是一名自学者,也是一名javascript初学者,所以我正在学习和练习。守则: //Index.js问题出在哪里 //此字段用于控制结果文本字段 var textfield=“”; //此函数用于将数字/操作按钮复制到文本字段 //它起作用了 函数重新运行编号(val){ 控制台日志(val); 如果(textfield!=“”){ te
//Index.js问题出在哪里
//此字段用于控制结果文本字段
var textfield=“”;
//此函数用于将数字/操作按钮复制到文本字段
//它起作用了
函数重新运行编号(val){
控制台日志(val);
如果(textfield!=“”){
textfield=textfield+val;
document.getElementById('result')。value=textfield;
}else if(textfield==“”){
textfield=val;
document.getElementById('result')。value=textfield;
}
}
//此函数用于清除文本字段
//它起作用了
document.getElementById('clear')。addEventListener(“单击”,函数(){
document.getElementById('result')。value=“”;
textfield=“”;
});
//这是要进行计算的函数,但是
//没什么
//不确定
函数结果(数字、运算){
var currentResult=数字[0];
对于(var i=0;i您正在为textfield
赋值,但这只是一个字符串,不会自动显示在页面中
如果希望其值显示在页面中(按“等于”时),则可以使用:
document.getElementById('result').value = "some value";
请注意,您同时调用函数结果(数字、操作)
两次,最好调用一次并存储结果。另一种方法是使用函数
你可以像这样改变你的事件
document.getElementById('equal').addEventListener("click", function(){
var elResult = document.getElementById('result');
textfield = " ";
elResult.value = eval(elResult.value);
})
或者(更好)你可以使用
e、 g
var newNum=true;
函数重新运行编号(val){
if(newNum){
document.getElementById('result')。value=val;
newNum=false
}否则{
document.getElementById('result')。value+=val;
}
}
document.getElementById('clear')。addEventListener(“单击”,函数(){
document.getElementById('result')。value=“”;
newNum=true;
});
document.getElementById('equal')。addEventListener(“单击”,函数(){
var elResult=document.getElementById('result');
newNum=true;
elResult.value=函数(''use strict';返回('+elResult.value+'))();
})
.grid容器{
显示:网格;
网格模板列:重复(3,1fr);
栅隙:10px;
}
.集装箱{
利润率:10%;
}
.项目1{
网格柱:1/5;
}
.项目2{
网格柱:2/4;
}
.项目3{
网格行:2;
网格柱:4;
}
.项目4{
网格行:3;
网格柱:4;
}
.项目5{
网格行:4;
网格柱:4;
}
.textField{
宽度:100%;
}
计算器
1.
2.
3.
4.
5.
6.
7.
8.
9
0
*
/
+
-
相等的
删除
清楚的
有几个小问题
}if(操作[i]='/'){
需要是}else if(操作[i]='/'){
添加else
for(var i=0;i值数组是一个字符串数组,因此必须将每个项转换为数字,使用parseInt
/* here must be `else if` */
} if(operations[i] == '/'){
currentResult = currentResult / numbers[i+1];
}else{
currentResult = "Wrong";
}
OBS:浮点数将出错。
优先权被忽略
//Index.js问题出在哪里
//此字段用于控制结果文本字段
var textfield=“”;
//此函数用于将数字/操作按钮复制到文本字段
//它起作用了
函数重新运行编号(val){
如果(textfield!=“”){
textfield=textfield+val;
document.getElementById('result')。value=textfield;
}else if(textfield==“”){
textfield=val;
document.getElementById('result')。value=textfield;
}
}
//此函数用于清除文本字段
//它起作用了
document.getElementById('clear')。addEventListener(“单击”,函数(){
document.getElementById('result')。value=“”;
textfield=“”;
});
//这是要进行计算的函数,但是
函数结果(数字、运算){
var currentResult=parseInt(数字[0]);//首先,转换为数字
对于(var i=0;i if(Number.isInteger(res)){/*==true这个条件:iThis;}else if(textfield==”){
可以是一个}else{
,因为你知道在那一点上,文本化的等于,@ziggywiggy我没有做任何改变:(现在我将尝试下一个注释This:}如果(operations[I]='/')){
应该是}else if(operations[i]=='/'){
,否则下一个else
将消除上面可能存在的任何条件。下面是我如何编写结果
函数(只是一个首选项):函数结果(数字,操作){return operations.reduce((res,op,i)=>op='+'?res+数字[i+1]:op='-'?res-数字[i+1]:op='*'?res*数字[i]+
/* here must be `else if` */
} if(operations[i] == '/'){
currentResult = currentResult / numbers[i+1];
}else{
currentResult = "Wrong";
}