Estoy tratando de activar mi función maestra solo si se presionan ciertas teclas. Sin embargo, se llama independientemente del botón en el que se haga clic. Aunque el registro de la consola muestra una clave diferente.
¿Alguien puede aconsejar?
//Update display on keydown event addEventListener('keydown', (e) => { pressedKey = event.key; console.log(pressedKey); keyDownOperatorMapping(e); }); let keyDownOperatorMapping = (e) => { if (pressedKey === "+" || "-" || "*" || "Enter" || "Backspace" || "." || "/") { masterFunction(e); } };Ejemplo: https://jsfiddle.net/rykawgs9/
Es porque su condición actual es
Hey is pressedKey equal is "+" o es "-" is true o //continúa
Como una cadena con una longitud de más de uno es siempre uno, siempre devuelve verdadero, su condición siempre es verdadera
Así que una forma de archivar estos
addEventListener('keydown', (e) => { pressedKey = event.key; console.log(pressedKey); keyDownOperatorMapping(e); }); let keyDownOperatorMapping = (e) => { const keys = ["+", "-", "*", "Enter", "Backspace", ".", "/"] if (keys.includes(pressedKey)) { console.log("Found"); } };Tienes que poner la variable con la que estás comparando. Que es en su caso, la pressedKey :
if (pressedKey === "+" || pressedKey === "-" || pressedKey === "*" || pressedKey === "Enter" || pressedKey === "Backspace" || pressedKey === "." || pressedKey === "/") ...Puede reducir un poco el código agregando las claves de búsqueda a una matriz y luego verificar que la matriz includes la clave que se ingresó.
const allowed = ['+', '-', '*', 'Enter', 'Backspace', ',', '/']; document.addEventListener('keydown', (e) => { const { key } = e; if (allowed.includes(key)) { // masterFunction(e) console.log(key); } });Documentación adicional