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 trueet tout continuera comme d'habitude. Si c'est le cas Enter, il reviendra falseet tout s'arrêtera immédiatement, donc le formulaire ne sera pas envoyé.
L' keydownévénement est préféré keyupcar il keyupest 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.keyplace qui renvoie le nom de la touche enfoncée. Lorsque Enterest 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/ keyupdans 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.