Czy w Jquery jest jakieś zdarzenie, które jest uruchamiane tylko wtedy, gdy użytkownik naciśnie przycisk Enter w polu tekstowym? Lub jakaś wtyczka, którą można dodać, aby to uwzględnić? Jeśli nie, jak napisałbym szybką wtyczkę, która by to zrobiła?
javascript
jquery
jquery-events
Kliknij opcję Upvote
źródło
źródło
e.keyCode
dla niektórych kluczy, lepiej używaće.which
, to zagwarantuje, że będziesz obsługiwać ten sam przycisk w każdej przeglądarceźródło
Oto wtyczka dla Ciebie: (Fiddle: http://jsfiddle.net/maniator/CjrJ7/ )
źródło
$
zmiennej dla wtyczki nie jest dobrym pomysłem, ponieważ może powodować konflikty.$("#myInput").bind('click, onEnter', myCallback);
i działało bez potrzeby niczego innego?Oto wtyczka jquery, aby to zrobić
aby go użyć, dołącz kod i skonfiguruj go w następujący sposób:
jsfiddle z tego tutaj http://jsfiddle.net/VrwgP/30/
źródło
func.apply(this)
, w ten sposób wewnątrz funkcji wywołania zwrotnego możnathis
normalnie użyć, aby uzyskać dostęp do elementu, w którym wywołano zdarzenie.e.preventDefault(); e.stopPropagation();
wewnątrzif (e.keyCode)
kawałka.Należy zauważyć, że użycie
live()
jQuery jest przestarzałe od wersji1.7
i zostało usunięte w jQuery1.9
. Zamiast tegoon()
zalecane jest użycie.Zdecydowanie zasugerowałbym następującą metodologię wiązania, ponieważ rozwiązuje ona następujące potencjalne wyzwania:
document.body
i przekazanie selektora $ jako drugiego argumentuon()
elementy mogą być dołączane, odłączane, dodawane lub usuwane z DOM bez konieczności radzenia sobie ze zdarzeniami ponownego wiązania lub podwójnego wiązania. Wynika to z faktu, że zdarzenie jest dołączonedocument.body
raczej niż$selector
bezpośrednio, co oznacza$selector
można je dodawać, usuwać i dodawać ponownie i nigdy nie załaduje zdarzenia związanego z nim.off()
wcześniejon()
, ten skrypt może żyć w obrębie głównej strony strony lub w treści wywołania AJAX, bez konieczności martwienia się o przypadkowe podwójne powiązanie zdarzeń.$(function() {...})
ten może zostać ponownie załadowany przez główną treść strony lub w treści wywołania AJAX.$(document).ready()
nie zostaje zwolniony dla żądań AJAX, a jednocześnie$(function() {...})
.Oto przykład:
źródło
Jeśli twoje dane wejściowe są
search
, możesz również użyćon 'search'
zdarzenia. Przykład.
źródło
Kod HTML:-
Kod skryptu Java
Twój formularz nie ma domyślnego przycisku przesyłania
źródło
Kolejna subtelna odmiana. Poszedłem do lekkiego rozdzielenia mocy, więc mam wtyczkę, aby umożliwić złapanie klawisza Enter, a następnie po prostu łączę się ze zdarzeniami normalnie:
A następnie w użyciu:
Ta odmiana umożliwia użycie delegowania zdarzeń (w celu powiązania z elementami, które nie zostały jeszcze utworzone).
źródło
Nie mogłem zmusić
keypress
zdarzenia do uruchomienia przycisku Enter i podrapałem się po głowie, dopóki nie przeczytałem dokumentów jQuery:„ Zdarzenie naciśnięcia klawisza jest wysyłane do elementu, gdy przeglądarka rejestruje dane z klawiatury. Jest to podobne do zdarzenia skrótu klawiaturowego, z wyjątkiem tego, że modyfikator i klawisze niedrukowalne, takie jak Shift, Esc i usuwanie zdarzeń skrótu wyzwalacza, ale nie zdarzenia naciśnięcia klawisza. ” ( https://api.jquery.com/keypress/ )
Musiałem użyć zdarzenia
keyup
lubkeydown
, aby złapać naciśnięcie przycisku Enter.źródło