Que tenemos:
keydown
event + preventDefault
evita el evento de keypress
de tecla (prueba: https://stackoverflow.com/a/57401334/9398364 )stopPropagation
no ayuda en absolutoevent.key
no imprimibles (que no podemos simplemente lanzar como valor Unicode usando event.key.codePointAt(0)
)Lo que necesitamos:
Deshabilite la reacción predeterminada de las teclas del navegador (es decir, presione la tab
en Chrome) sin una gran expresión de cambio
Detectar eventos keydown
porque necesitamos shift
, ctrl
y otros eventos de teclas ( event.code
importa)
Detectar eventos de keypress
de tecla porque necesitamos ingresar caracteres Unicode ( event.key
importa) sin evento input
y sin verificar si es un carácter no imprimible (como shift
y ctrl
)
¿Cómo?
UPD: parece que event.key no Unicode tiene una longitud de> 1 (fuente: https://stackoverflow.com/a/70401792/9398364 ) ¿Hay alguna prueba?
Resuelto así:
window.addEventListener('keydown', function (event) { onKeyboard(event.code); if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) { const utf16Code = event.key.codePointAt(0); onKeyboardInput(utf16Code); } event.preventDefault(); }, false);