Todo mi código funciona excepto por una cosa: si uso los botones en pantalla primero, LUEGO uso el teclado, la respuesta no aparece. por ejemplo, si hago clic en 5+5 y luego presiono el botón "=" obtengo 10, pero si borro, luego escribo 5+5 y presiono Intro, la respuesta no aparece. Sin embargo, si la página se actualiza, puedo usar el teclado sin problemas, se muestra la respuesta.
En mi código, "ingresar" está configurado para hacer lo mismo que el botón "=".
Encontré el origen del problema (espero) pero no estoy seguro de cómo solucionarlo: en mi función de cómputo, cuando uso el teclado después de usar los botones, mi if(isNaN) devuelve un 1 en el archivo console.log (para poder encontrar dónde estaba fallando el código) No estoy seguro de por qué cree que lo que ingresa no es un número, porque funciona bien cuando no se tocan los botones.
Aquí está el código para el botón igual:
equalsButton.addEventListener('click', button => { calculator.compute() calculator.updateDisplay() })Aquí está el código para entrar:
document.onkeyup = e => { //code for numbers 1-9 & operations// else if(e.key === "Enter") { calculator.compute() calculator.updateDisplay() console.log("the answer is " + calculator.compute()) }Aquí está el código de la función de cálculo:
compute() { let computation const prev = parseFloat(this.previousOperand) const current = parseFloat(this.currentOperand) if(isNaN(prev) || isNaN(current)) return 1 switch(this.operation) { case '+': computation = prev + current break case '-': computation = prev - current break case '*': computation = prev * current break case '÷': computation = prev / current break default: return } this.currentOperand = computation this.operation = undefined this.previousOperand = '' console.log(this.currentOperand) }¡Cualquier ayuda es apreciada!
en primer lugar, solo como práctica recomendada, no necesita crear un objeto en su función de clic si no necesita trabajar con el evento--
equalsButton.addEventListener('click',() => { calculator.compute() calculator.updateDisplay() })ahora,
la solución rápida es hacer que el evento keydown sea un alias para su función click() =>
else if(e.key === "Enter") { equalsButton.click() // console.log("the answer is " + calculator.compute()) } También me di cuenta de que llamas calculator.compute() como el primer paso de tu controlador de eventos 'Entrar', y luego lo vuelves a llamar en la instrucción console.log() , que borra el cálculo anterior (configurándolo en un cadena vacía aka NaN )
espero que todo esto ayude!