Mam dwie funkcje. Po naciśnięciu Enter funkcje działają poprawnie, ale po naciśnięciu klawisza Escape nie. Jaka jest poprawna liczba dla klawisza Escape?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
źródło
źródło
document.addEventListener("keydown", e => console.log(e.keyCode))
do konsoli przeglądarki, kliknij w okno i naciśnij szukany klawisz.Odpowiedzi:
Spróbuj ze zdarzeniem keyup :
źródło
keydown
naśladuje zachowanie natywne - przynajmniej w systemie Windows, w którym naciśnięcie ESC lub Return w oknie dialogowym wyzwoli akcję przed zwolnieniem klawisza.Zamiast na stałe kodować wartości kodu w funkcji, rozważ użycie nazwanych stałych, aby lepiej przekazać swoje znaczenie:
Niektóre przeglądarki (takie jak FireFox, niepewne innych) definiują
KeyEvent
obiekt globalny, który udostępnia ci tego rodzaju stałe. To pytanie SO pokazuje fajny sposób zdefiniowania tego obiektu również w innych przeglądarkach.źródło
0x1B
i Enter jest0x0D
, prawda?(Odpowiedź pochodzi z mojego poprzedniego komentarza )
Musisz użyć
keyup
zamiastkeypress
. na przykład:keypress
wydaje się, że nie jest obsługiwany konsekwentnie między przeglądarkami (wypróbuj wersję demo na http://api.jquery.com/keypress w IE vs Chrome vs Firefox. Czasamikeypress
się nie rejestruje, a wartości zarówno „które”, jak i „ keyCode 'różnią się), alekeyup
jest spójny.Ponieważ była dyskusja na temat
e.which
vse.keyCode
: Uwaga,e.which
jest to wartość znormalizowana dla jquery i jest zalecana do użycia:(z http://api.jquery.com/event.which/ )
źródło
keypress
podczas ucieczki, robią to dobrze.keypress
ma strzelać tylko wtedy, gdy klucz produkuje postać, podczas gdykeyup
zawsze strzela. developer.mozilla.org/en-US/docs/Web/Events/keypressAby znaleźć kod dla dowolnego klawisza, użyj tej prostej funkcji:
źródło
27
jest kodem klawisza Escape. :)źródło
Twój najlepszy zakład to
Podsumowanie
which
jest bardziej preferowany niżkeyCode
dlatego, że jest znormalizowanykeyup
jest bardziej preferowane niżkeydown
dlatego, że klawisz skrótu może wystąpić wiele razy, jeśli użytkownik będzie go przytrzymywał.keypress
chyba że chcesz uchwycić rzeczywiste postacie.Co ciekawe, Bootstrap używa keydown i keyCode w rozwijanym komponencie (od 3.0.2)! Myślę, że jest to prawdopodobnie zły wybór.
Powiązany fragment z dokumentu JQuery
Inne interesujące przedmioty: JavaScript Keypress Library
źródło
Wypróbuj wtyczkę jEscape ( pobierz z dysku Google )
lub uzyskaj kod dostępu do przeglądarki
może możesz użyć przełącznika
źródło
Twój kod działa dobrze. Najprawdopodobniej okno nie jest skoncentrowane. Używam podobnej funkcji do zamykania ramek iframe itp.
źródło
Próbowałem zrobić to samo i to mnie wyśmiewało. W Firefoksie wygląda na to, że jeśli spróbujesz wykonać pewne czynności po naciśnięciu klawisza Escape, kontynuuje on przetwarzanie klawisza Escape, który następnie anuluje wszystko, co próbujesz zrobić. Alert działa dobrze. Ale w moim przypadku chciałem wrócić do historii, która nie zadziałała. W końcu zorientowałem się, że muszę zmusić propagację zdarzenia do zatrzymania, jak pokazano poniżej ...
źródło
Wyjaśnić, gdzie nie ma innych odpowiedzi; problemem jest twoje użycie
keypress
.Być może zdarzenie jest po prostu źle nazwane, ale
keypress
jest zdefiniowane jako uruchamiane, kiedy . Tj. Tekst. Natomiast tym, czego chcesz, jest / , który uruchamia się za każdym razem (odpowiednio przed lub po) . Tj. Te rzeczy na klawiaturze.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
Różnica pojawia się tutaj, ponieważ
esc
jest to znak kontrolny (dosłownie „znak niedrukowalny”), więc nie pisze żadnego tekstu, a więc nawet nie odpalakeypress
.enter
jest dziwne, ponieważ nawet jeśli używasz go jako znaku kontrolnego (tj. do sterowania interfejsem użytkownika), nadal wstawia znak nowej linii, który zostanie uruchomionykeypress
.Źródło: quirksmode
źródło
Aby uzyskać kod szesnastkowy dla wszystkich znaków: http://asciitable.com/
źródło
Po prostu opublikowałem zaktualizowaną odpowiedź, która nie
e.keyCode
jest uznawana ZA DEPRECATED na MDN .Zamiast tego powinieneś wybrać opcję,
e.key
która obsługuje czyste nazwy dla wszystkiego. Oto odpowiedni kopia makaronuźródło
Esc
zamiast standardowegoEscape
.Solidna biblioteka JavaScript do przechwytywania danych wprowadzanych z klawiatury i kombinacji klawiszy. Nie ma zależności.
http://jaywcjlove.github.io/hotkeys/
Klawisze skrótu rozumie następujących wyrażeń: ⇧, shiftoption⌥altctrlcontrolcommandi ⌘.
Następujące klawisze specjalne mogą być wykorzystywane do skrótów: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deletei f1dzięki f19.
źródło
Zawsze korzystałem z keyup i e. Które złapały klawisz Escape.
źródło
Wiem, że to pytanie dotyczy jquery, ale dla osób używających jqueryui istnieją stałe dla wielu kodów:
http://api.jqueryui.com/jQuery.ui.keyCode/
źródło