W jQuery, jak mogę dowiedzieć się, który klawisz został naciśnięty podczas łączenia się ze zdarzeniem naciśnięcia klawisza?
$('#searchbox input').bind('keypress', function(e) {});
Chcę uruchomić wysyłanie po ENTERnaciśnięciu.
[Aktualizacja]
Chociaż sam znalazłem (lub lepiej: jedną) odpowiedź, wydaje się, że jest miejsce na różnice;)
Czy jest jakaś różnica między - keyCode
a which
zwłaszcza jeśli tylko szukam ENTER, która nigdy nie będzie kluczem Unicode?
Czy niektóre przeglądarki zapewniają jedną właściwość, a inne drugą?
Odpowiedzi:
W rzeczywistości jest to lepsze:
źródło
e.which
, niezależnie od tego, które zdarzenie używasz.e.which
nie jest ustawione (pozostaje0
), alee.keyCode
jest (9
). Zobacz stackoverflow.com/questions/4793233/... dlaczego to ma znaczenie.Spróbuj tego
źródło
Jeśli używasz interfejsu jQuery, masz tłumaczenia popularnych kodów kluczy. W plikach ui / ui / ui.core.js :
Jest też kilka tłumaczeń w testach / simulate / jquery.simulate.js, ale nie mogłem znaleźć żadnych w podstawowej bibliotece JS. Pamiętajcie, po prostu pozdrowiłem źródła. Może istnieje inny sposób na pozbycie się tych magicznych liczb.
Możesz także skorzystać z String.charCodeAt i .fromCharCode:
źródło
Uncaught TypeError: String.charCodeAt is not a function
Myślę, że chciałeś powiedzieć'\r'.charCodeAt(0) == 13
Biorąc pod uwagę, że używasz jQuery, powinieneś bezwzględnie używać. Które. Tak, różne przeglądarki ustawiają różne właściwości, ale jQuery je znormalizuje i ustawi wartość .w każdym przypadku. Zobacz dokumentację na http://api.jquery.com/keydown/, która stanowi:
źródło
... ten przykład uniemożliwia przesłanie formularza (regularnie podstawowa intencja podczas przechwytywania naciśnięcia klawisza # 13):
źródło
edycja: Działa to tylko dla IE ...
Zdaję sobie sprawę, że to stary post, ale ktoś może uznać to za przydatne.
Kluczowe zdarzenia są odwzorowywane, więc zamiast używać wartości kodu klucza, można również użyć wartości klucza, aby uczynić ją nieco bardziej czytelną.
Oto ściągawka z mapowanymi kluczami, które otrzymałem z tego bloga
źródło
e.key
własnościźródło
event.which
.Zapoznaj się z doskonałą wtyczką jquery.hotkeys, która obsługuje kombinacje klawiszy:
źródło
Mam nadzieję, że to może ci pomóc !!!
źródło
Jest to prawie pełna lista kodów kluczowych:
źródło
Okej, byłem ślepy:
będzie zawierać kod ASCII klucza.
Zobacz https://developer.mozilla.org/En/DOM/Event.which
źródło
Oto szczegółowy opis zachowania różnych przeglądarek http://unixpapa.com/js/key.html
źródło
Po prostu uzupełnię kod rozwiązania tą linią
e.preventDefault();
. W przypadku pola wejściowego formularza nie bierzemy udziału w wciśnięciu Enterźródło
Dodaj ukryte przesyłanie, nie wpisuj ukryte, po prostu zwykłe przesyłanie ze stylem = "display: none". Oto przykład (usunięto niepotrzebne atrybuty z kodu).
akceptuje natywnie klawisz Enter, nie wymaga JavaScript, działa w każdej przeglądarce.
źródło
Oto rozszerzenie jquery, które obsługuje naciśnięty klawisz Enter.
Działający przykład można znaleźć tutaj http://jsfiddle.net/EnjB3/8/
źródło
Czarownica ;)
Demo: http://jsfiddle.net/molokoloco/hgXyq/24/
źródło
Użyj
event.key
i nowoczesny JS!Brak kodów liczbowych . Możesz sprawdzić klucz bezpośrednio. Na przykład
"Enter"
,"LeftArrow"
,"r"
, lub"R"
.Dokumenty Mozilla
Obsługiwane przeglądarki
źródło
powinieneś mieć firbug, aby zobaczyć wynik w konsoli
źródło
Niektóre przeglądarki używają keyCode, inne używają których. Jeśli używasz jQuery, możesz niezawodnie używać tego, ponieważ jQuery standaryzuje rzeczy. Tak właściwie,
źródło
Zgodnie z odpowiedzią Kiliana:
Jeśli tylko wprowadź klawisz, ważne jest:
źródło
Najłatwiej to zrobić:
źródło
event.which
zamiastevent.keyCode
. Z jQuery API :The event.which property normalizes event.keyCode and event.charCode. It is recommended to watch event.which for keyboard key input.
Właśnie stworzyłem wtyczkę do jQuery, która umożliwia łatwiejsze
keypress
zdarzenia. Zamiast znajdować numer i wstawiać go, wszystko co musisz zrobić, to:Jak tego użyć
To takie proste. Należy pamiętać, że nie
theKeyYouWantToFireAPressEventFor
jest to liczba, ale ciąg znaków (np. Do odpalenia po naciśnięciu, do odpalenia po naciśnięciu lub, w przypadku liczby, po prostu bez cudzysłowów. Odpaliłby po naciśnięciu)."a"
A"ctrl"
CTRL (control)1
1Przykład / kod:
Pokaż fragment kodu
Ponieważ długa wersja jest tak ... no ... długa, stworzyłem dla niej link PasteBin:
http://pastebin.com/VUaDevz1
źródło
event.keyCode
Ievent.which
są depracated. Zobacz odpowiedź @Gibolt powyżej lub sprawdź dokumentację: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEventevent.key
należy zamiast tego użyćkeypress
wydarzenie jest również depracowane: https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_eventźródło
Spróbuj tego:
źródło