Nie zezwalaj na wprowadzanie klucza w dowolnym miejscu
Jeśli nie masz <textarea>
formularza w formularzu, dodaj następujące elementy do <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Lub z jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Spowoduje to, że każde naciśnięcie klawisza w formularzu będzie sprawdzane w key
. Jeśli nie Enter
, to wróci true
i wszystko będzie kontynuowane jak zwykle. Jeśli tak Enter
, to wróci false
i wszystko natychmiast się zatrzyma, więc formularz nie zostanie przesłany.
keydown
Wydarzenie jest korzystniejszy keyup
, ponieważ keyup
jest zbyt późno, aby złożyć formie bloku. Historycznie istniało równieżkeypress
, ale to jest przestarzałe, podobnie jak KeyboardEvent.keyCode
. Zamiast tego należy użyć, KeyboardEvent.key
który zwraca nazwę naciskanego klawisza. Gdy Enter
jest zaznaczone, to sprawdza 13 (normalne wejście), a także 108 (numpad enter).
Zauważ, że $(window)
jak sugerują niektóre inne odpowiedzi zamiast $(document)
nie działa dla keydown
/ keyup
w IE <= 8, więc nie jest to dobry wybór, jeśli chcesz objąć również tych biednych użytkowników.
Zezwalaj na klawisz Enter tylko w obszarach tekstowych
Jeśli masz <textarea>
w swoim formularzu (co oczywiście powinno zaakceptować klawisz Enter), dodaj moduł obsługi klawiszy do każdego elementu wejściowego, który nie jest <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Aby zmniejszyć płytkę kotłową, lepiej to zrobić za pomocą jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Jeśli masz inne funkcje obsługi zdarzeń dołączone do tych elementów wejściowych, które z jakiegoś powodu chciałbyś również wywołać po naciśnięciu klawisza enter, to tylko zapobiegaj domyślnemu zachowaniu zdarzenia zamiast zwracania wartości false, aby mógł on poprawnie propagować do innych programów obsługi.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Zezwalaj na klawisz Enter tylko w obszarach tekstowych i wysyłaj tylko przyciski
Jeśli chcesz zezwolić na klawisz Enter na przyciskach przesyłania <input|button type="submit">
, zawsze możesz zawęzić selektor jak poniżej.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Zauważ, że input[type=text]
jak sugerowano w niektórych innych odpowiedziach, nie obejmuje tych nietekstowych danych HTML5, więc nie jest to dobry selektor.