Javascript calculator user error handling

Viewed 35

I am relatively new to coding and am currently practising making a good old calculator using html, css and javascript. I am however struggling with how the calculator handles user input errors. Doing "5++5" or "5+-5" for instance makes the calculator do nothing. The goal is for "5++5" to lead to "5+5" and "5+-5" to lead to "5-5" and so on. If anyone can help me implement this i would be more than thankful!

console.log("hi");

let screen = document.getElementById('display');
evalValue = "";
screenData = "";
screen.value = "0";
buttons = document.querySelectorAll('button');
for (item of buttons) {
    item.addEventListener('click', function (e) {
        buttonValue = e.target.innerText;

        if (buttonValue == String.fromCharCode(215)) {
            screenData += String.fromCharCode(215);
            buttonValue = '*';
            evalValue += buttonValue;
            screen.value = screenData;

        }


        else if (buttonValue == String.fromCharCode(247)) {
            screenData += String.fromCharCode(247);
            buttonValue = '/';
            evalValue += buttonValue;
            screen.value = screenData;
        }

        else if (buttonValue == "=") {

            length = evalValue.length;
            console.log(length);

            if (evalValue == "") {

            }

            else if((evalValue.charAt(evalValue.length-1) == "%")){

                console.log("before eval screendata  " + screenData);
                console.log("before eval evalvalue  " + evalValue);
                evalValue = evalValue.substring(0, length-1);
                screen.value = eval(evalValue)/100;
                evalValue = screen.value;
                screenData = screen.value;
                console.log("after eval screendata  " + screenData);
                console.log("before eval evalvalue  " + evalValue)

            }


            else{
                console.log("before eval screendata  " + screenData);
                console.log("before eval evalvalue  " + evalValue);
                screen.value = eval(evalValue);
                evalValue = screen.value;
                screenData = screen.value;
                console.log("after eval screendata  " + screenData);
                console.log("before eval evalvalue  " + evalValue);
            }

        }

        else if (buttonValue == "DEL") {
            if (screen.value == "0") {

            }
            else {
                size = screen.value.length;
                screen.value = screen.value.substring(0, size - 1);
                evalValue = evalValue.substring(0, size - 1);
                screenData = screen.value;
            }

        }

        else if (buttonValue == "AC") {
            screenData = "";
            screen.value = "0";
            evalValue = "";

        }

        else if (buttonValue == String.fromCharCode(8730)) {
            screenData += (String.fromCharCode(8730) + "(");
            buttonValue = 'Math.sqrt(';
            evalValue += buttonValue;
            screen.value = screenData;
        }


        else if (buttonValue == String.fromCharCode(177)) {
            console.log("clicked +-");

            if (evalValue == "0") {
            }

            else {

                screenData = -parseFloat(screenData);
                buttonValue = '';
                evalValue = -parseFloat(evalValue);;
                screen.value = screenData;

            }


        }

        else {
            screenData += buttonValue;
            evalValue += buttonValue;
            screen.value = screenData;
        }

    })
}

console.log(buttons);
/* for styling */

.container {
  text-align : center;
  max-width: 100%;

}

table{
  margin : auto;
}

button{
  width: 147px;
  height: 64.5px;
  margin: 3px;
  border-radius: 5px;
  border: 1px solid #f1f3f4;
  background-color: #f1f3f4;
  font-size: 25px;
  cursor: pointer;

}


button:active{
  border : 2px solid #dce5e9;
}

#display{
  width: 594px;
  height: 77px;
  margin-bottom:  10px;
  border-radius: 5px;
  border: 1px solid #d4dce0;;
  font-size: 35px;
  padding: 0px 10px;
  text-align: right;

}

.secondarybtn{
  background-color:#dadce0;
}
.ansbtn {

  background-color: #4285f4;
  font-weight: 700;
  color: white;


}

#backbtn{

  background-color: #dadce0;
  text-decoration-color: #dadce0;
}

@media screen and (max-width: 800px) {
  button{
    width: 15vw;
    font-size: 4vw;

  }
  #display{
    width: 61vw;

  }
  #h1{
    font-size: 6vw;
  }

  div #footer{
    font-size: 2vw;
  }
}

div #footer{
  margin-top: 50px;
}

 
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calculator</title>
    <link rel="stylesheet" href="css/calculator.css">
</head>

<body>
    <div class="container">
        <h1 id="h1"> Calculator</h1>
        <input id="display" type="text" name="output">

        <!-- create table -->

        <table>
            <tr>
                <td><button class="secondarybtn">(</button></td>
                <td><button class="secondarybtn">)</button></td>
                <td><button id="clear" class="secondarybtn">DEL</button></td>
                <td><button id="reset" class="secondarybtn">AC</button></td>
            </tr>

            <tr>
                <td><button class="secondarybtn">&#177</button></td>
                <td><button class="secondarybtn">.</button></td>
                <td><button class="secondarybtn">%</button></td>
                <td><button class="secondarybtn">&#8730</button></td>

            </tr>


            <tr>
                <td><button id="seven">7</button></td>
                <td><button id="eight">8</button></td>
                <td><button id="nine">9</button></td>
                <td><button id="divide" class="secondarybtn">&#247</button></td>
            </tr>
            <tr>
                <td><button id="four">4</button></td>
                <td><button id="five">5</button></td>
                <td><button id="six">6</button></td>
                <td><button id="multiply" class="secondarybtn">&#215</button></td>
            </tr>
            <tr>
                <td><button id="one">1</button></td>
                <td><button id="two">2</button></td>
                <td><button id="three">3</button></td>
                <td><button id="minus" class="secondarybtn">-</button></td>
            </tr>
            <tr>
                <td><button>00</button></td>
                <td><button id="zero">0</button></td>

                <td><button id="equals" class="ansbtn">=</button></td>
                <td><button id="plus" class="secondarybtn">+</button></td>
            </tr>
        </table>

        

    </div>



</body>
<script src="js/calculator.js"></script>

</html>

0 Answers
Related