Eu examinei as respostas acima e a abordagem keydown
/ proposta keyup
funciona apenas em circunstâncias especiais. Se o usuário Alt-tab se distanciar ou usar um gesto de tecla para abrir uma nova janela ou guia do navegador, então um keydown
será registrado, o que é bom, porque nesse ponto é impossível dizer se a tecla é algo que o aplicativo da web está monitorando ou é um navegador padrão ou atalho do sistema operacional. Voltando à página do navegador, ele ainda pensará que a chave está segura, embora tenha sido lançada nesse meio tempo. Ou alguma tecla é simplesmente mantida pressionada, enquanto o usuário muda para outra guia ou aplicativo com o mouse, e então solta fora de nossa página.
As teclas modificadoras ( Shift
etc.) podem ser monitoradas via mousemove
etc., assumindo que há pelo menos uma interação do mouse esperada ao voltar a tabulação, o que é frequentemente o caso.
Para a maioria todas as outras teclas (exceto modificadores, Tab
, Delete
, mas incluindo Space
, Enter
), monitoramento keypress
iria trabalhar para a maioria das aplicações - uma tecla pressionada continuará a fogo. Porém, há alguma latência na redefinição da chave, devido à periodicidade do keypress
disparo. Basicamente, se keypress
não continuar disparando, é possível descartar a maioria das chaves. Isso, combinado com os modificadores, é bastante hermético, embora eu não tenha explorado o que fazer com Tab
e Backspace
.
Tenho certeza de que há alguma biblioteca por aí que resume essa fraqueza do DOM, ou talvez alguma mudança no padrão do DOM tenha cuidado disso, já que é uma questão bastante antiga.