Interdire la touche entrée n'importe où
Si vous n'en avez pas <textarea>
dans votre formulaire, ajoutez simplement ce qui suit à votre <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Ou avec jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Cela entraînera que chaque pression de touche à l'intérieur du formulaire sera vérifiée sur le key
. Si ce n'est pas le cas Enter
, il reviendra true
et tout continuera comme d'habitude. Si c'est le cas Enter
, il reviendra false
et tout s'arrêtera immédiatement, donc le formulaire ne sera pas envoyé.
L' keydown
événement est préféré keyup
car il keyup
est trop tard pour bloquer la soumission du formulaire. Historiquement, il y avait aussi le keypress
, mais c'est obsolète, tout comme le KeyboardEvent.keyCode
. Vous devez utiliser à la KeyboardEvent.key
place qui renvoie le nom de la touche enfoncée. Lorsque Enter
est coché, cela vérifierait 13 (entrée normale) ainsi que 108 (entrée du pavé numérique).
Notez que $(window)
comme suggéré dans certaines autres réponses au lieu de $(document)
ne fonctionne pas pour keydown
/ keyup
dans IE <= 8, ce n'est donc pas un bon choix si vous souhaitez également couvrir ces pauvres utilisateurs.
Autoriser la touche Entrée uniquement sur les zones de texte
Si vous avez un <textarea>
dans votre formulaire (qui bien sûr devrait accepter la touche Entrée), ajoutez le gestionnaire de keydown à chaque élément d'entrée individuel qui n'est pas un <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Pour réduire le passe-partout, il est préférable de le faire avec jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Si vous avez d'autres fonctions de gestionnaire d'événements attachées à ces éléments d'entrée, que vous souhaitez également invoquer sur la touche Entrée pour une raison quelconque, n'empêchez que le comportement par défaut de l'événement au lieu de renvoyer false, afin qu'il puisse se propager correctement aux autres gestionnaires.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Autoriser la touche Entrée dans les zones de texte et soumettre uniquement les boutons
Si vous souhaitez également autoriser la touche Entrée sur les boutons de soumission <input|button type="submit">
, vous pouvez toujours affiner le sélecteur comme ci-dessous.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Notez que, input[type=text]
comme suggéré dans certaines autres réponses, ne couvre pas ces entrées non textuelles HTML5, ce n'est donc pas un bon sélecteur.