Non consentire la chiave di invio ovunque
Se non hai un <textarea>
nel tuo modulo, aggiungi semplicemente quanto segue al tuo <form>
:
<form ... onkeydown="return event.key != 'Enter';">
O con jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Ciò farà sì che ogni tasto premuto all'interno del modulo verrà controllato sul key
. In caso contrario Enter
, tornerà true
e tutto continuerà come al solito. Se lo è Enter
, allora tornerà false
e qualsiasi cosa si fermerà immediatamente, quindi il modulo non verrà inviato.
L' keydown
evento è preferito keyup
perché keyup
è troppo tardi per bloccare l'invio del modulo. Storicamente c'era anche il keypress
, ma questo è deprecato, così come il KeyboardEvent.keyCode
. Si dovrebbe usare KeyboardEvent.key
invece che restituisce il nome del tasto premuto. Quando Enter
è selezionato, quindi verificherebbe 13 (invio normale) e 108 (immissione tastierino numerico).
Nota che, $(window)
come suggerito in alcune altre risposte, invece $(document)
non funziona per keydown
/ keyup
in IE <= 8, quindi non è una buona scelta se ti piace coprire anche quegli utenti poveri.
Consenti il tasto Invio solo sulle aree di testo
Se hai un <textarea>
nel tuo modulo (che ovviamente dovrebbe accettare il tasto Invio), aggiungi il gestore keydown a ogni singolo elemento di input che non è un <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Per ridurre il boilerplate, è meglio farlo con jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Se hai altre funzioni del gestore eventi associate a quegli elementi di input, che vorresti anche invocare sulla chiave di invio per qualche motivo, previeni solo il comportamento predefinito dell'evento invece di restituire false, quindi può propagarsi correttamente ad altri gestori.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Consenti il tasto Invio sulle aree di testo e invia solo i pulsanti
Se desideri consentire anche il tasto Invio sui pulsanti di invio <input|button type="submit">
, puoi sempre perfezionare il selettore come di seguito.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Nota che, input[type=text]
come suggerito in alcune altre risposte, non copre quegli input HTML5 non testuali, quindi non è un buon selettore.