Recorrí las respuestas anteriores y la propuesta keydown
/ keyup
enfoque funciona sólo en circunstancias especiales. Si el usuario cambia de pestaña o utiliza un gesto de tecla para abrir una nueva ventana o pestaña del navegador,keydown
se registrará una, lo cual está bien, porque en ese momento es imposible saber si la tecla es algo que la aplicación web está monitoreando , o es un navegador estándar o un acceso directo al sistema operativo. Volviendo a la página del navegador, todavía pensará que la clave está retenida, aunque se soltó mientras tanto. O simplemente se mantiene presionada alguna tecla, mientras el usuario cambia a otra pestaña o aplicación con el mouse, y luego se suelta fuera de nuestra página.
Las teclas modificadoras ( Shift
etc.) se pueden monitorear a través de, mousemove
etc., asumiendo que se espera al menos una interacción del mouse al volver a tabular, lo que suele ser el caso.
Durante la mayor parte todas las demás teclas (excepto modificadores, Tab
, Delete
, pero incluyendo Space
, Enter
), la vigilancia keypress
podría funcionar para la mayoría de aplicaciones - una clave presionado, se seguirá el fuego. Sin embargo, hay cierta latencia al restablecer la clave, debido a la periodicidad del keypress
disparo. Básicamente, si keypress
no sigue disparando, es posible descartar la mayoría de las teclas. Esto, combinado con los modificadores, es bastante hermético, aunque no he explorado qué hacer con Tab
y Backspace
.
Estoy seguro de que hay alguna biblioteca que abstrae esta debilidad de DOM, o tal vez algún cambio estándar de DOM se encargó de ello, ya que es una pregunta bastante antigua.