Eu examinei as respostas acima e a abordagem keydown/ proposta keyupfunciona 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 keydownserá 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 ( Shiftetc.) podem ser monitoradas via mousemoveetc., 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 keypressiria 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 keypressdisparo. Basicamente, se keypressnã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 Tabe 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.