Geben Sie die Eingabetaste an keiner Stelle ein
Wenn Sie keine <textarea>
in Ihrem Formular haben, fügen Sie einfach Folgendes zu Ihrem hinzu <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Oder mit jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Dies führt dazu, dass jeder Tastendruck im Formular auf dem überprüft wird key
. Wenn dies nicht der Fall ist Enter
, wird es zurückkehren true
und alles wird wie gewohnt fortgesetzt. Wenn dies der Fall ist Enter
, wird es zurückgegeben false
und alles wird sofort gestoppt, sodass das Formular nicht gesendet wird.
Die keydown
Veranstaltung wird der Veranstaltung vorgezogen, keyup
da keyup
es zu spät ist, die Formularübermittlung zu blockieren. Historisch gab es auch die keypress
, aber diese ist veraltet, ebenso wie die KeyboardEvent.keyCode
. Sie sollten KeyboardEvent.key
stattdessen verwenden, was den Namen der gedrückten Taste zurückgibt. Wenn Enter
diese Option aktiviert ist, werden sowohl 13 (normale Eingabe) als auch 108 (Numpad-Eingabe) überprüft.
Beachten Sie, dass, $(window)
wie in einigen anderen Antworten vorgeschlagen, $(document)
nicht für keydown
/ keyup
in IE <= 8 funktioniert. Dies ist also keine gute Wahl, wenn Sie auch diese armen Benutzer abdecken möchten.
Eingabetaste nur in Textbereichen zulassen
Wenn Sie eine <textarea>
in Ihrem Formular haben (die natürlich die Eingabetaste akzeptieren sollte ), fügen Sie den Keydown-Handler zu jedem einzelnen Eingabeelement hinzu, das keine ist <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Um die Boilerplate zu reduzieren, ist dies besser mit jQuery zu tun:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Wenn an diese Eingabeelemente andere Ereignishandlerfunktionen angehängt sind, die Sie aus irgendeinem Grund auch bei der Eingabetaste aufrufen möchten, verhindern Sie nur das Standardverhalten des Ereignisses, anstatt false zurückzugeben, damit es ordnungsgemäß an andere Handler weitergegeben werden kann.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Lassen Sie die Eingabetaste in Textbereichen zu und senden Sie nur Schaltflächen
Wenn Sie die Eingabetaste auch für die Senden-Schaltflächen zulassen möchten <input|button type="submit">
, können Sie die Auswahl jederzeit wie folgt verfeinern.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Beachten Sie, dass, input[type=text]
wie in einigen anderen Antworten vorgeschlagen, diese HTML5-Nicht-Texteingaben nicht behandelt werden. Dies ist also keine gute Auswahl.