Przeskanowałem powyższe odpowiedzi i zaproponowane keydown
/ keyup
podejście działa tylko w szczególnych okolicznościach. Jeśli użytkownik opuści alt-tab lub użyje gestu klawisza, aby otworzyć nowe okno lub kartę przeglądarki, keydown
zostanie zarejestrowany a, co jest w porządku, ponieważ w tym momencie nie można stwierdzić, czy klucz jest czymś, co monitoruje aplikacja internetowa lub jest standardowym skrótem przeglądarki lub systemu operacyjnego. Wracając do strony przeglądarki, nadal będzie myśleć, że klucz jest wstrzymany, chociaż został w międzyczasie wydany. Lub jakiś klawisz jest po prostu przytrzymywany, podczas gdy użytkownik przechodzi do innej karty lub aplikacji za pomocą myszy, a następnie zwalniany poza naszą stroną.
Klawisze modyfikujące ( Shift
itp.) Mogą być monitorowane za pomocą mousemove
itp., Przy założeniu, że podczas cofania tabulatorem spodziewana jest przynajmniej jedna interakcja myszy, co często ma miejsce.
Dla większości wszystkie inne klawisze (oprócz modyfikatorów Tab
, Delete
ale w tym Space
, Enter
), monitoring keypress
będzie pracować dla większości zastosowań - klucz przytrzymany nadal będzie ogień. Istnieje jednak pewne opóźnienie w resetowaniu klucza ze względu na okresowość keypress
odpalania. Zasadniczo, jeśli keypress
nie strzela dalej, można wykluczyć większość klawiszy. To w połączeniu z modyfikatorami jest dość szczelne, chociaż nie zbadałem, co zrobić z Tab
i Backspace
.
Jestem pewien, że jest jakaś biblioteka, która streszcza tę słabość DOM, a może jakaś standardowa zmiana DOM załatwiła to, ponieważ jest to dość stare pytanie.