Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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_Calculator_User Experience - Fatal编程技术网

Javascript中的连续计算

Javascript中的连续计算,javascript,calculator,user-experience,Javascript,Calculator,User Experience,我有一个用JS制作的简单计算器,它工作得很好,但是当我完成计算并得到结果时(即按下“=”按钮),我希望返回的结果处于保存状态。“=”按钮必须准备好再次单击,并获得相同的结果,然后将其添加到保存结果中 我尝试了许多明显的方法,例如将结果添加到自身(这不起作用,因为结果将被自身相乘,而不是添加),利用eval()函数并向最终结果添加“+”字符串,等等 TLDR:如果您转到任何计算器程序,键入“2+2”并单击等于,您将得到4。如果再次单击“等于”,则会得到6(“2+2+2”) 以下是我当前的代码: v

我有一个用JS制作的简单计算器,它工作得很好,但是当我完成计算并得到结果时(即按下“=”按钮),我希望返回的结果处于保存状态。“=”按钮必须准备好再次单击,并获得相同的结果,然后将其添加到保存结果中

我尝试了许多明显的方法,例如将结果添加到自身(这不起作用,因为结果将被自身相乘,而不是添加),利用eval()函数并向最终结果添加“+”字符串,等等

TLDR:如果您转到任何计算器程序,键入“2+2”并单击等于,您将得到4。如果再次单击“等于”,则会得到6(“2+2+2”)

以下是我当前的代码:

var disp = document.getElementById("calc-output"),
  acceptedInputs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, "-", ".", "+", "*", "/"];

function ud(n) {
  if (acceptedInputs.includes(n)) {
    if (disp.innerHTML.length == 31) {
      disp.innerHTML = 0;
    }
    if (disp.innerHTML.length < 18) {
      if (disp.innerHTML != 0) {
        disp.innerHTML += n;
      } else if (acceptedInputs.slice(11, -1).includes(n)) {
        disp.innerHTML = 0 + n;
      } else if (disp.innerHTML.toString().slice(1, 2) == ".") {
            if (disp.innerHTML.toString().split(".").length-1 <= 1) {
                disp.innerHTML += n;
            }
      } else {
        disp.innerHTML = n;
      }
    }
  }
}

function answer() {
  if (eval(disp.innerHTML) == disp.innerHTML) {
    disp.innerHTML = disp.innerHTML + "+"
  }
  c = eval(disp.innerHTML);
  disp.innerHTML = c;
}

function clear() {
  disp.innerHTML = "0";
}

function back() {
  var str = disp.innerHTML.toString();
  if (disp.innerHTML != 0 || str.charAt(1) == ".") {
    if (str.length >= 2) {
      str = str.slice(0, -1);
      disp.innerHTML = str;
    } else {
      disp.innerHTML = 0;
    }
  }
}

document.getElementById("n1").addEventListener("click", function() {
  ud(1);
});
document.getElementById("n2").addEventListener("click", function() {
  ud(2);
});
document.getElementById("n3").addEventListener("click", function() {
  ud(3);
});
document.getElementById("n4").addEventListener("click", function() {
  ud(4);
});
document.getElementById("n5").addEventListener("click", function() {
  ud(5);
});
document.getElementById("n6").addEventListener("click", function() {
  ud(6);
});
document.getElementById("n7").addEventListener("click", function() {
  ud(7);
});
document.getElementById("n8").addEventListener("click", function() {
  ud(8);
});
document.getElementById("n9").addEventListener("click", function() {
  ud(9);
});
document.getElementById("zero-button").addEventListener("click", function() {
  ud(0);
});
document.getElementById("comma-button").addEventListener("click", function() {
  ud('.');
});

document.getElementById("plus-button").addEventListener("click", function() {
  ud('+');
});
document.getElementById("minus-button").addEventListener("click", function() {
  ud('-');
});
document.getElementById("multi-button").addEventListener("click", function() {
  ud('*');
});
document.getElementById("div-button").addEventListener("click", function() {
  ud('/');
});
document.getElementById("back-button").addEventListener("click", function() {
  back();
});
document.getElementById("clear-button").addEventListener("click", function() {
  clear();
});
document.getElementById("equals-button").addEventListener("click", function() {
  answer();
});
var disp=document.getElementById(“计算输出”),
acceptedInputs=[1、2、3、4、5、6、7、8、9、0、“-”、“+”、“*”、“/”];
功能ud(n){
如果(接受输入,包括(n)){
if(disp.innerHTML.length==31){
disp.innerHTML=0;
}
if(disp.innerHTML.length<18){
如果(disp.innerHTML!=0){
disp.innerHTML+=n;
}else if(acceptedInputs.slice(11,-1).includes(n)){
disp.innerHTML=0+n;
}else if(disp.innerHTML.toString().slice(1,2)==”){
if(disp.innerHTML.toString().split(“.”).length-1=2){
str=str.slice(0,-1);
disp.innerHTML=str;
}否则{
disp.innerHTML=0;
}
}
}
document.getElementById(“n1”).addEventListener(“单击”,函数)(){
ud(1);
});
document.getElementById(“n2”).addEventListener(“单击”,函数)(){
ud(2);
});
document.getElementById(“n3”).addEventListener(“单击”,函数)(){
ud(3);
});
document.getElementById(“n4”).addEventListener(“单击”,函数)(){
ud(4);
});
document.getElementById(“n5”).addEventListener(“单击”,函数)(){
ud(5);
});
document.getElementById(“n6”).addEventListener(“单击”,函数)(){
ud(6);
});
document.getElementById(“n7”).addEventListener(“单击”,函数)(){
ud(7);
});
document.getElementById(“n8”).addEventListener(“单击”,函数)(){
ud(8);
});
document.getElementById(“n9”).addEventListener(“单击”,函数)(){
ud(9);
});
document.getElementById(“零按钮”).addEventListener(“单击”,函数(){
ud(0);
});
document.getElementById(“逗号按钮”).addEventListener(“单击”,函数)(){
ud(‘.);
});
document.getElementById(“加号按钮”).addEventListener(“单击”,函数)(){
ud(+);
});
document.getElementById(“减号按钮”).addEventListener(“单击”,函数)(){
ud('-');
});
document.getElementById(“多按钮”).addEventListener(“单击”,函数)(){
ud(“*”);
});
document.getElementById(“div按钮”).addEventListener(“单击”,函数)(){
ud(“/”);
});
document.getElementById(“后退按钮”).addEventListener(“单击”,函数)(){
背();
});
document.getElementById(“清除按钮”).addEventListener(“单击”,函数)(){
清除();
});
document.getElementById(“等于按钮”).addEventListener(“单击”,函数)(){
答案();
});
当用户单击“相等”时,将最后一个操作(例如“+2”)保存在某个变量中。因此,当他再次单击时,只需将保存的值从显示添加到字符串中即可

var lastOperation = null;

function answer() {
    if (eval(disp.innerHTML) == disp.innerHTML) {
        // apply the last operation to displayed number
        disp.innerHTML = disp.innerHTML + (lastOperation ? lastOperation[0] : '');
    }
    // find the last operation + | - | * | /
    lastOperation = disp.innerHTML.split(new RegExp('(\\+|\\-|\\*|/).*$'));
    c = eval(disp.innerHTML);
    disp.innerHTML = c;
}

目前,这个问题对于堆栈溢出来说太广泛了。您展示了大量代码,但不是问题的一个最小和完整的示例。而“问题”是您希望向工作程序添加功能,但尚未尝试这样做。我们鼓励您尝试这样做。例如,当您说“我希望保存返回的结果",是什么阻止您保存该值?将其保存到一个变量中。您以后可以使用该变量吗?如果它需要存在于不同的范围中,请将其保存在不同的范围中,等等。尝试时,您会遇到什么问题?我曾尝试将结果保存在计算结果的函数中的变量中,但显然该变量会失败每次调用函数时都会发生更改,导致结果本身相乘而不是相加的问题。我曾想过在代码开头添加一个数组来存储函数返回的结果,但该函数被设置为修改输出元素的.innerHTML,而不是返回值。尝试过这一点是很好的尝试t step.现在,当你尝试时,你会遇到什么具体的问题?我们无法真正帮助你回答这样的问题:“我试图构建一些东西,但我不知道如何构建,有人能帮我完成并向我展示如何构建?”但我们可以帮你回答这样的问题:“在这个具体的小例子中,我试着做这个具体的事情,但在这一行中,我看到了这个变量的值,这是我不期望的。为什么?“缩小问题范围,提供详细信息等。我们可以帮助您了解任何给定尝试失败的原因。要了解更多有关此社区的工作以及我们如何帮助您的信息,我们鼓励您从以下方面开始: