Eingabetaste nicht überall zulassen
Wenn Sie keine <textarea>
in Ihrem Formular, dann fügen Sie einfach Folgendes zu Ihrem <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Oder mit jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Dies bewirkt, dass jeder Tastendruck innerhalb des Formulars in der key
. Wenn es nicht Enter
zurück, dann wird es true
und alles geht weiter wie bisher. Wenn es Enter
zurück, dann wird es false
und alles wird sofort abgebrochen, so dass das Formular nicht abgeschickt wird.
Le site keydown
Ereignis wird vorgezogen gegenüber keyup
als die keyup
zu spät ist, um das Absenden des Formulars zu blockieren. In der Vergangenheit gab es auch die keypress
aber dies ist veraltet, ebenso wie die KeyboardEvent.keyCode
. Sie sollten verwenden KeyboardEvent.key
die den Namen der gedrückten Taste zurückgibt. Wenn Enter
angekreuzt ist, würde dies sowohl 13 (normale Eingabe) als auch 108 (Zifferntasten-Eingabe) prüfen.
Beachten Sie, dass $(window)
wie in einigen anderen Antworten vorgeschlagen, anstelle von $(document)
funktioniert nicht für keydown
/ keyup
in IE<=8, also ist das keine gute Wahl, wenn man auch diese armen Nutzer abdecken möchte.
Eingabetaste nur für Textbereiche zulassen
Wenn Sie eine <textarea>
in Ihrem Formular (das natürlich auch debe die Eingabetaste akzeptieren), dann fügen Sie den Keydown-Handler zu jedem einzelnen Eingabeelement hinzu, das nicht ein <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Um Boilerplate zu reduzieren, ist es besser, dies mit jQuery zu tun:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Wenn Sie andere Event-Handler-Funktionen auf diesen Eingabeelementen, die Sie auch auf Enter-Taste aus irgendeinem Grund aufrufen möchten, dann nur verhindern, dass Event-Standard-Verhalten anstelle der Rückgabe von false, so dass es ordnungsgemäß an andere Handler propagieren kann.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Eingabetaste nur für Textbereiche und Sendebuttons zulassen
Wenn Sie die Eingabetaste auf Übermittlungsschaltflächen zulassen möchten <input|button type="submit">
dann können Sie den Selektor wie unten beschrieben verfeinern.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Beachten Sie, dass input[type=text]
wie in einigen anderen Antworten vorgeschlagen, deckt diese HTML5-Nicht-Text-Eingaben nicht ab, also ist das kein guter Selektor.