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 truei wszystko będzie kontynuowane jak zwykle. Jeśli tak Enter, to wróci falsei wszystko natychmiast się zatrzyma, więc formularz nie zostanie przesłany.
keydownWydarzenie jest korzystniejszy keyup, ponieważ keyupjest 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.keyktóry zwraca nazwę naciskanego klawisza. Gdy Enterjest 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/ keyupw 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.