Używam keypress
słuchacza np.
addEventListener("keypress", function(event){
}
Jednak to nie wydaje się wykrywać cofania, które usuwa tekst ...
Czy istnieje inny odbiornik, którego mogę użyć, aby to wykryć?
javascript
keypress
addeventlistener
Skizit
źródło
źródło
keypress
zdarzenia w wielu przeglądarkach. Zobacz unixpapa.com/js/key.htmlSpróbuj
keydown
zamiastkeypress
.Zdarzenia klawiatury występują w następującej kolejności:
keydown
,keyup
,keypress
Problem z backspace polega prawdopodobnie na tym, że przeglądarka powróci, przez
keyup
co Twoja strona nie zobaczykeypress
zdarzenia.źródło
keydown
keypress
keyup
. unixpapa.com/js/testkey.htmlkeyup
zdarzenie nie zostanie uruchomione .keydown
zdarzenie, ale znak nie jest usuwany z wejścia aż do jakiegoś czasu po tym.keypress
Zdarzenie może być różne w różnych przeglądarkach.Stworzyłem Jsfiddle, aby porównać zdarzenia klawiatury (używając skrótów JQuery) w Chrome i Firefox. W zależności od przeglądarki, której używasz,
keypress
zdarzenie zostanie wyzwolone lub nie - Backspace uruchomi siękeydown/keypress/keyup
w przeglądarce Firefox, ale tylkokeydown/keyup
w Chrome.Wywołane zdarzenia pojedynczego kliknięcia klawisza
w przeglądarce Chrome
keydown/keypress/keyup
kiedy przeglądarka zarejestruje wejście z klawiatury (keypress
jest odpalona)keydown/keyup
jeśli nie wprowadzono danych z klawiatury (testowane za pomocą klawiszy alt, shift, backspace, strzałek)keydown
tylko na kartę?w przeglądarce Firefox
keydown/keypress/keyup
kiedy przeglądarka rejestruje wejście z klawiatury, ale także dla backspace, klawiszy strzałek, tabulatora (więc tutajkeypress
jest uruchamiany nawet bez wejścia)keydown/keyup
dla alt, shiftNie powinno to dziwić, ponieważ według https://api.jquery.com/keypress/ :
Używanie typu zdarzenia keypress jest przestarzałe przez W3C ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
Na koniec, aby odpowiedzieć na swoje pytanie, powinieneś użyć
keyup
lubkeydown
wykryć backspace w przeglądarkach Firefox i Chrome.Wypróbuj tutaj:
źródło
Coś, co napisałem na wypadek, gdyby ktoś napotkał problem z naciśnięciem klawisza Backspace, myśląc, że znajduje się w polu formularza
źródło
Moja kontrola numeryczna:
Spróbuj
Kod klucza BackSpace to 8
źródło
event.key === "Backspace"
Nowsze i znacznie czystsze: użyj
event.key
. Nigdy więcej dowolnych kodów liczbowych!Dokumenty Mozilli
Obsługiwane przeglądarki
źródło
.key
jest obecnie zalecaną opcją przez dokumentację. Ponadto obsługuje różne klawiatury międzynarodowe z różnymi mapowaniami dla dowolnego klawisza. Nie są arbitralne w tym sensie, że są naprawione, ale są podczas czytania koduZamiast tego użyj jednego ze zdarzeń keyup / keydown / beforeinput.
na podstawie tego odniesienia keypress jest przestarzałe i nie jest już zalecane.
jeśli używasz „beforeinput”, uważaj na zgodność z przeglądarką . różnica między „beforeinput” a pozostałymi dwoma polega na tym, że „beforeinput” jest uruchamiane, gdy wartość wejściowa ma się zmienić, więc w przypadku znaków, które nie mogą zmienić wartości wejściowej, nie jest ona uruchamiana (np. shift, ctr, alt).
Miałem ten sam problem i dzięki keyup udało się go rozwiązać.
źródło