我正在从事创建一种计算器变体的项目。基本上,我将所有用户点击(可能是数字和运算符,如+,-)存储在一个数组中,并在用户点击“=”时将该数组交给另一个函数。我为此使用javascript。以下是我的代码:
var arr=[]; //array of every input from the user interface stored
var i=0; //number of input clicks from the user
var opPos=[]; //position of the operator as given by the user
var operAnd=[];//operands as given by the user
var disp='';
function clearval() {
// This function clears all the values stored in related array when C or CE is pressed
document.getElementById("op").value=0;
arr=[];
i=0;
opPos=[];
operAnd=[];
disp='';
}
//This Function get the value and supplies the array to calculating function
function getval(inp){
if(inp!="=")
{
arr[i]=inp;
disp=disp+inp;//for display in the screen of the output screen
document.getElementById("op").value=disp;
if (typeof inp!="number"){
opPos.push(i);
operAnd.push(inp);
}
i++;
}
else
{
var newInput=assembler(arr,opPos,operAnd);
clearval();
getval(parseFloat(newInput,10));
}
}
//<!------This Function calculates based on array, operator position and operands------!>
function assembler(num_array,opPos,operAnd){
var num='';
var numCollect=[];
var posCount=0;
for(var j=0;j<num_array.length;j++){
if (j==opPos[posCount]) {
numCollect.push(parseFloat(num,10));
num='';
j++;
posCount++;
}
else if (j>posCount) {
}
num=num+num_array[j];
}
num=parseFloat(num,10);
numCollect.push(num);
//document.getElementById("op").value= numCollect;
var newInput=calculator(numCollect,operAnd);
return newInput;
}
function calculator(target_num,operAnd) {
// Not the nice solution but straightforward nonetheless
var result='';
for (var l=0;l<operAnd.length;l++) {
result=result+target_num[l]+operAnd[l];
}
result=result+target_num[l];
document.getElementById("op").value=result + '=' + eval(result) ;
return eval(result);
}
我有 html 有这样的按钮:
<button class="num" onclick="getval(0)">0</button>
<button class="num" onclick="getval(1)">1</button>
<button class="num" onclick="getval(2)" >2</button>
<button class="num" onclick="getval(3)" >3</button>
......................... and so on
对于基本数学,此代码工作正常,不是问题。但是,这是我的问题,我很难考虑如何实现这一点。例如,我有一个像这样的关注按钮。
<button class='extra' onclick="Regression()"> Find Regression </button>
现在,我将拥有回归函数,它会要求用户输入回归类型(1-线性、2-二次等……这只是一个示例)。
function regression(){
clearval();
document.getElementById("op").value=" Enter the degree of regression:";
这基本上是要求用户输入数字并单击“=”进入程序。现在你可以看到我的困境了。任何用户输入都将首先由 getval() 处理,当用户单击“=”时,它将把数组传递给另一个函数,这不是我在这种情况下想要的。需要明确的是,对于这种情况,我会有很多,比如 std。dev 或类似这样的某种函数,我希望键盘表现得像普通键盘一样,并将值传递给另一个函数,而不像应该做的那样做普通的计算器工作。
我这样想吗?有什么建议么?