I've created a calculator and I want the operate() function to be called once all values are not an empty string. For example 5 + 5 should call operate() as soon as the second number is entered.
Whats confusing me is the input field is displaying 5 + 5 but when I console.log the input.value I get 5 + and secondNumbers = "". I'm not sure why this is happening.
If you look in the console to the right of the image you see I get 4 + which is console.log(inputdisplay.value)
I'im not sure if this is Javascript being weird or if I've done something wrong.
const buttons = document.querySelectorAll('button');
const inputdisplay = document.querySelector('.input-display');
var firstNumbers;
var secondNumbers;
var operator;
buttons.forEach(function(button) {
button.addEventListener('click', function(e) {
firstNumbers = inputdisplay.value.split(" ")[0]
operator = inputdisplay.value.split(" ")[1]
secondNumbers = inputdisplay.value.split(" ")[2]
console.log(inputdisplay.value)
console.log(secondNumbers)
if (typeof(secondNumbers) === "string" && secondNumbers !== "") {
console.log("ran")
inputdisplay.value = operate()
} else if (button.classList.contains("AC")) {
inputdisplay.value = ""
return
} else if (button.classList.contains("equals")) {
inputdisplay.value = operate()
} else if (button.classList.contains("operator")) {
inputdisplay.value += ` ${button.innerText} `
} else {
inputdisplay.value += button.innerText
}
})
})
function operate() {
intFirstNumbers = parseFloat(firstNumbers)
intSecondNumbers = parseFloat(secondNumbers)
try {
switch (operator) {
case "+":
return intFirstNumbers + intSecondNumbers
case "-":
return intFirstNumbers - intSecondNumbers
case "*":
return intFirstNumbers * intSecondNumbers
case "/":
return intFirstNumbers / intSecondNumbers
}
} catch (e) {
return "Error: " + e.message
}
}
<div class="container">
<input readonly class="input-display" type="text">
<div class="grid">
<div class="numberGrid">
<div class="row-1">
<button class=" button 1">1</button>
<button class=" button 2">2</button>
<button class=" button 3">3</button>
<button class=" button 4">4</button>
</div>
<div class=" row-2">
<button class=" button 5">5</button>
<button class=" button 6">6</button>
<button class=" button 7">7</button>
<button class=" button 8">8</button>
</div>
<div class="row-3">
<button class=" button 9">9</button>
<button class=" button 0">0</button>
<button class=" button decimal ">.</button>
</div>
</div>
<div class="operatorGrid">
<div class="row-4">
<button class=" button sum operator"> + </button>
<button class=" button subtract operator"> - </button>
<button class=" button multiply operator"> * </button>
<button class=" button divide operator"> / </button>
<button class=" button backspace operator"> -></button>
<button class=" button equals"> = </button>
<button class=" button AC">AC</button>
</div>
</div>
</div>
</div>
