Estoy escribiendo código para ejecutar una función específica cuando se presiona la tecla ctrl + shift + z . Cuando presiono dos teclas al mismo tiempo, funciona bien, pero cuando presiono tres teclas, el evento no ocurre. A continuación se muestra el código que escribí.
prueba 1:
document.onkeydown = function (e) { if (e.ctrlKey && e.key === 'z') { // It works undo() // ctrl+ z } else if (e.ctrlKey && e.shiftKey && e.key==='z' ) { //It doesn't work redo(); //ctrl + shift + z } }prueba 2:
document.onkeydown = function (e) { // var ctrl, shift,z console.log(e.key) switch (e.key) { case 'Control': ctrl = true; break; case 'Shift': shift = true; break; case 'Z': z = true; break; } if (ctrl&&shift&&z) redo() }Ninguno de estos funcionará si está escribiendo en tres teclados.
Cómo hacer que funcione cuando se presiona ctrl+shift+z
Cambie el orden de las condiciones, ya que la primera condición siempre es true si la segunda es true , lo que hace que el código de la segunda condición nunca se ejecute.
document.onkeydown = function(e) { if (e.ctrlKey && e.shiftKey && e.key === 'Z') { undo() } else if (e.ctrlKey && e.key === 'Z') { redo(); } }Una buena manera de realizar un seguimiento de las teclas presionadas es con un objeto:
const keys = {} function onKeyDown(e) { keys[e.key.toLowerCase()] = true doSomething() } function onKeyUp(e) { keys[e.key.toLowerCase()] = false } window.addEventListener('keydown', onKeyDown) window.addEventListener('keyup', onKeyUp) function doSomething() { console.log(keys) if (keys.control && keys.shift && keys.z) { console.log("redo!") } else if (keys.control && keys.z) { console.log("undo!") } }