I created a basic calculator in JavaScript which takes the value of the innerHTML and performs the calculations, and it sort of works, except that it doesn't chain multiple operations i.e 1 + 2 returns 3, but 1 + 2 + 1 also returns 3. Please can anyone help with this thanks.
https://jsfiddle.net/d2x6e7aj/
My HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calculator</title>
<link rel="stylesheet" href="main.css">
</head>
<body>
<h1 id="field">myCalculator</h1>
<table>
<tr>
<td id="main" colspan="4">
<div id="display1"></div>
</td>
</tr>
<tr>
<td class="numbers"><button id="power">^</button></td>
<td class="numbers"><button id="squareroot">√</button></td>
<td class="numbers"><button id="delete">DEL</button></td>
<td class="numbers"><button id="clear">C</button></td>
</tr>
<tr>
<td class="numbers"><button class='btn-input'>0</button></td>
<td class="numbers"><button class='btn-input'>1</button></td>
<td class="numbers"><button class='btn-input'>2</button></td>
<td class="numbers"><button id="divide">/</button></td>
</tr>
<tr>
<td class="numbers"><button class='btn-input'>3</button></td>
<td class="numbers"><button class='btn-input'>4</button></td>
<td class="numbers"><button class='btn-input'>5</button></td>
<td class="numbers"><button id="multiply">*</button></td>
</tr>
<tr>
<td class="numbers"><button class='btn-input'>6</button></td>
<td class="numbers"><button class='btn-input'>7</button></td>
<td class="numbers"><button class='btn-input'>8</button></td>
<td class="numbers"><button id="subtract">-</button></td>
</tr>
<tr>
<td class="numbers"><button class='btn-input'>9</button></td>
<td class="numbers"><button id="dot">.</button></td>
<td class="numbers"><button id="add">+</button></td>
<td class="numbers"><button id="equals">=</button></td>
</tr>
</table>
<script src="main.js"></script>
</body>
</html>
And JavaScript:
"use strict";
let display = document.getElementById("display1");
function operatorButton() {
var button = document.getElementById("squareroot");
button.addEventListener("click", function () {
display.innerHTML += "√";
})
var button = document.getElementById("power");
button.addEventListener("click", function () {
display.innerHTML += "^";
})
var button = document.getElementById("divide");
button.addEventListener("click", function () {
display.innerHTML += "/";
})
var button = document.getElementById("multiply");
button.addEventListener("click", function () {
display.innerHTML += "*";
})
var button = document.getElementById("subtract");
button.addEventListener("click", function () {
display.innerHTML += "-";
})
var button = document.getElementById("add");
button.addEventListener("click", function () {
display.innerHTML += "+";
})
var button = document.getElementById("dot");
button.addEventListener("click", function () {
display.innerHTML += ".";
})
var button = document.getElementById("clear");
button.addEventListener("click", function () {
display.innerHTML = "";
})
var button = document.getElementById("delete");
button.addEventListener("click", function () {
display.innerHTML = display.innerHTML.slice(0, display.innerHTML.length - 1);
})
}
operatorButton();
function numButton() {
let button = document.querySelectorAll('.btn-input');
for (let i = 0; i < button.length; i++) {
button[i].addEventListener("click", function () {
display.innerHTML += i
})
}
}
numButton();
const addition = (operand1, operand2) => operand1 + operand2;
const subtraction = (operand1, operand2) => operand1 - operand2;
const multiplication = (operand1, operand2) => operand1 * operand2;
const division = (operand1, operand2) => operand1 / operand2;
const squareroot = (operand1) => Math.sqrt(operand1);
const power = (operand1, operand2) => Math.pow(operand1, operand2);
function operate(operand1, operator, operand2) {
switch (operator) {
case '^':
return power(operand1, operand2);
case '/':
return division(operand1, operand2);
case '*':
return multiplication(operand1, operand2);
case '+':
return addition(operand1, operand2);
case '-':
return subtraction(operand1, operand2);
default:
break;
}
}
operate();
function operate1(operator, operand1) {
switch (operator) {
case '√':
return squareroot(operand1);
default:
break;
}
}
operate1();
function calculator() {
var button = document.getElementById("equals");
button.addEventListener("click", function () {
let calculation = display.innerHTML.split('');
let operation, answer, operand1, operand2;
for (let i = 0; i < calculation.length; i++) {
if (calculation[i] === "^" || calculation[i] === "/" || calculation[i] === '*' || calculation[i] === "+" || calculation[i] === "-") {
let operationPos = calculation.indexOf(calculation[i]);
operation = calculation[i];
operand1 = parseFloat(calculation.slice(0, operationPos).join(''));
operand2 = parseFloat(calculation.slice(operationPos + 1).join(''));
answer = operate(operand1, operation, operand2);
display.innerHTML = (answer);
} else if (calculation[i] === "√") {
let operationPos = calculation.indexOf(calculation[i]);
operation = calculation[i];
operand1 = parseFloat(calculation.slice(operationPos + 1).join(''));
answer = operate1(operation, operand1);
display.innerHTML = (answer);
}
}
})
}
calculator();