Recorrí las respuestas anteriores y la propuesta keydown/ keyupenfoque 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 ( Shiftetc.) se pueden monitorear a través de, mousemoveetc., 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 keypresspodrí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 keypressdisparo. Básicamente, si keypressno 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 Taby 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.