简体   繁体   English

为什么我的 JavaScript 计算器不起作用?

[英]Why is my JavaScript calculator not working?

 // function clearfunc() // { // document.getElementById("abcd").innerHTML="0"; // } function show(id) { if (id == "zero") document.getElementById("abcd").innerHTML = "0"; else if (id == "one") document.getElementById("abcd").innerHTML = "1"; else if (id == "two") document.getElementById("abcd").innerHTML = "2"; else if (id == "three") document.getElementById("abcd").innerHTML = "3"; else if (id == "four") document.getElementById("abcd").innerHTML = "4"; else if (id == "five") document.getElementById("abcd").innerHTML = "5"; else if (id == "six") document.getElementById("abcd").innerHTML = "6"; else if (id == "seven") document.getElementById("abcd").innerHTML = "7"; else if (id == "eight") document.getElementById("abcd").innerHTML = "8"; else if (id == "nine") document.getElementById("abcd").innerHTML = "9"; else if (id == "clear") document.getElementById("abcd").innerHTML = ""; } function afterPlus(id) { var whichOperator = ""; if (id == "equal") { b = Number(document.getElementById("abcd").innerHTML); switch (whichOperator) { case "plus": document.getElementById("abcd").innerHTML = (a + b); break; case "minus": document.getElementById("abcd").innerHTML = (a - b); break; case "mul": document.getElementById("abcd").innerHTML = (a * b); break; case "divide": document.getElementById("abcd").innerHTML = (a / b); break; default: document.getElementById("ans").innerHTML = b; } } else { whichOperator = id; //eg i need + - * and / to be got a = Number(document.getElementById("abcd").innerHTML); } }
 input { height: 100px; width: 150px; border-radius: 10px; border-style: none; background-color: black; color: white; } .abcde /*for display purposes*/ { background-color: blue; height: 100px; width: 608px; border-radius: 10px; color: white; font-size: 100px; }
 <h1>Basic calculator</h1> <div class="abcde" id="abcd"> </div> <input type="button" value="0" id="zero" onclick="return show(this.id)"> <input type="button" value="1" id="one" onclick="return show(this.id)"> <input type="button" value="2" id="two" onclick="return show(this.id)"> <input type="button" value="+" id="plus" onclick="return afterPlus(this.id)"> <br> <input type="button" value="3" id="three" onclick="return show(this.id)"> <input type="button" value="4" id="four" onclick="return show(this.id)"> <input type="button" value="5" id="five" onclick="return show(this.id)"> <input type="button" value="-" id="minus" onclick="return afterPlus(this.id)"> <br> <input type="button" value="6" id="six" onclick="return show(this.id)"> <input type="button" value="7" id="seven" onclick="return show(this.id)"> <input type="button" value="8" id="eight" onclick="return show(this.id)"> <input type="button" value="*" id="mul" onclick="return afterPlus(this.id)"> <br> <input type="button" value="9" id="nine" onclick="return show(this.id)"> <input type="button" value="C" id="clear" onclick="return show(this.id)"> <input type="button" value="=" id="equal" onclick="return afterPlus(this.id)"> <input type="button" value="/" id="divide" onclick="return afterPlus(this.id)">

I think I have done everything fine.我想我已经做得很好了。

expected output-: I press 1.预期输出-:我按 1。

1 is displayed through function show(id) 1 通过函数show(id)

now 1 is in paragraph id="abcd"现在 1 在段落id="abcd"

then user presses +然后用户按 +

it's id="plus" is passed to function afterplus(id) .它的id="plus"被传递给函数afterplus(id)

I check if id==equals or not.我检查id==equals

if the id!=equal , then store a=previous value as a number as well as the operator as a string.如果id!=equal ,则将 a=previous 值存储为数字以及将运算符存储为字符串。

else if id==equal then, I need to save b as the past number.否则如果id==equal那么,我需要将 b 保存为过去的数字。

then switch case will run, the operator id =(+ * / -) will be used in switch case and the proper calculation will be done.然后 switch case 将运行,操作符 id =(+ * / -) 将用于 switch case 并进行正确的计算。

I tried my best to not make many changes in your code, also tried to keep as simple as possible.我尽力不对您的代码进行太多更改,也尽量保持简单。 Here are some changes I've made.这是我所做的一些更改。

  • CSS: CSS:
input {
          height: 100px;
          width: 150px;
          border-radius: 10px;
          border-style: none;
          background-color: black;
          color: white;
      }

      .abcde
      /*for display purposes*/

      {
          position: relative;
          background-color: blue;
          height: 100px;
          width: 608px;
          border-radius: 10px;
          color: white;
          font-size: 100px;
      }

      .calc {
          position: relative;
          height: auto;
          width: 608px;
          color: white;
          font-size: 24px;
      }

      .abcde-2,
      .operator {
          width: 150px;
          height: 90px;
          text-align: left;
          position: absolute;
          right: 5px;
          text-align: right;
          font-weight: bolder;
      }

      .operator {
          top: -94px;
      }

      .abcde-2 {
          top: -50px;
      }
  • HTML: HTML:
<h1>Basic calculator</h1>
<div class="abcde" id="abcd"></div>
<div class="calc">
    <div class="operator" id="operator"></div>
    <div class="abcde-2" id="abcde-2"></div>
</div>

<input type="button" value="0" id="zero" onclick="return show(this.id)">
<input type="button" value="1" id="one" onclick="return show(this.id)">
<input type="button" value="2" id="two" onclick="return show(this.id)">

<input type="button" value="+" id="plus" onclick="return  afterPlus(this.id)"> <br>

<input type="button" value="3" id="three" onclick="return show(this.id)">
<input type="button" value="4" id="four" onclick="return show(this.id)">
<input type="button" value="5" id="five" onclick="return show(this.id)">

<input type="button" value="-" id="minus" onclick="return afterPlus(this.id)"> <br>

<input type="button" value="6" id="six" onclick="return show(this.id)">
<input type="button" value="7" id="seven" onclick="return show(this.id)">
<input type="button" value="8" id="eight" onclick="return show(this.id)">

<input type="button" value="*" id="mul" onclick="return afterPlus(this.id)"> <br>

<input type="button" value="9" id="nine" onclick="return show(this.id)">

<input type="button" value="C" id="clear" onclick="return show(this.id)">

<input type="button" value="=" id="equal" onclick="return afterPlus(this.id)">
<input type="button" value="/" id="divide" onclick="return afterPlus(this.id)">
  • JavaScript: JavaScript:
 /* Check if answered */
var answered = false;

function show(id) {
    if (answered) {
        /* If answered, make it false to add new value */
        answered = false;
        document.getElementById("abcd").innerText = "";
    }

    if (id == "zero")
        document.getElementById("abcd").innerText += "0";
    else if (id == "one")
        document.getElementById("abcd").innerText += "1";
    else if (id == "two")
        document.getElementById("abcd").innerText += "2";
    else if (id == "three")
        document.getElementById("abcd").innerText += "3";
    else if (id == "four")
        document.getElementById("abcd").innerText += "4";
    else if (id == "five")
        document.getElementById("abcd").innerText += "5";
    else if (id == "six")
        document.getElementById("abcd").innerText += "6";
    else if (id == "seven")
        document.getElementById("abcd").innerText += "7";
    else if (id == "eight")
        document.getElementById("abcd").innerText += "8";
    else if (id == "nine")
        document.getElementById("abcd").innerText += "9";
    else if (id == "clear") {
        document.getElementById("abcd").innerText = "";
        answered = false;
    }

}

function afterPlus(id) {
    var whichOperator = id;
    var answer = "";
    switch (whichOperator) {
        /* If equal button pressed */
        case "equal":
            if (document.getElementById("abcde-2").innerText != "") {

                 /* Operator Math  */
                switch (document.getElementById("operator").innerText) {
                    case "+":
                        answer = Number(document.getElementById("abcde-2").innerText) + Number(document.getElementById("abcd").innerText);
                        break;
                    case "-":
                        answer = Number(document.getElementById("abcde-2").innerText) - Number(document.getElementById("abcd").innerText);
                        break;
                    case "*":
                        answer = Number(document.getElementById("abcde-2").innerText) * Number(document.getElementById("abcd").innerText);
                        break;
                    case "/":
                        answer = Number(document.getElementById("abcde-2").innerText) / Number(document.getElementById("abcd").innerText);
                        break;

                    /* No Math Operator? then  */
                    default:
                        answered = false;
                        break;
                }

                /* Showing Answere  */    
                document.getElementById("abcd").innerText = "";
                document.getElementById("abcd").innerText = answer;
                answered = true;
            }
            break;

             /* other then equal button  */
        default:
            document.getElementById("operator").innerText = document.getElementById(whichOperator).value;
            document.getElementById("abcde-2").innerText = document.getElementById("abcd").innerText;
            document.getElementById("abcd").innerText = "";
            answered = false;
            break;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM