Interdire la touche Entrée n'importe où
Si vous n'avez pas de </code> dans votre formulaire, ajoutez simplement ce qui suit à votre <code><form></code>:</p> <pre><code><form ... onkeydown="return event.key != 'Enter';"> </code></pre> <p>Ou avec jQuery:</p> <pre><code>$(document).on("keydown", "form", function(event) { return event.key != "Enter"; }); </code></pre> <p>Cela fera en sorte que chaque pression de touche à l'intérieur du formulaire sera vérifiée sur la <code>clé</code>. Si ce n'est pas <code>Enter</code>, alors il renverra <code>true</code> et tout continuera normalement. Si c'est <code>Enter</code>, alors il renverra <code>false</code> et tout s'arrêtera immédiatement, donc le formulaire ne sera pas soumis.</p> <p>L'événement <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event" rel="noreferrer"><code>keydown</code></a> est préféré par rapport à <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/keyup_event" rel="noreferrer"><code>keyup</code></a> car le <code>keyup</code> est trop tard pour bloquer la soumission du formulaire. Historiquement, il y avait aussi le <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event" rel="noreferrer"><code>keypress</code></a>, mais celui-ci est obsolète, tout comme le <a href="https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode" rel="noreferrer"><code>KeyboardEvent.keyCode</code></a>. Vous devriez plutôt utiliser <a href="https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key" rel="noreferrer"><code>KeyboardEvent.key</code></a> qui renvoie le nom de la touche enfoncée. Lorsque <code>Enter</code> est vérifié, cela vérifierait 13 (Enter normal) ainsi que 108 (Enter du pavé numérique).</p> <p>Remarquez que <code>$(window)</code> comme suggéré dans certaines autres réponses au lieu de <code>$(document)</code> ne fonctionne pas pour <code>keydown</code>/<code>keyup</code> dans IE<=8, donc ce n'est pas un bon choix si vous souhaitez également couvrir ces pauvres utilisateurs.</p> <h2>Autoriser la touche Entrée uniquement sur les zones de texte</h2> <p>Si vous avez une <code><textarea></code> dans votre formulaire (qui bien sûr <em>devrait</em> accepter la touche Entrée), ajoutez le gestionnaire keydown à chaque élément d'entrée individuel qui n'est pas un <code><textarea></code>. </p> <pre><code><input ... onkeydown="return event.key != 'Enter';"> <select ... onkeydown="return event.key != 'Enter';"> ... </code></pre> <p>Pour réduire le code répétitif, il est préférable de le faire avec jQuery:</p> <pre><code>$(document).on("keydown", ":input:not(textarea)", function(event) { return event.key != "Enter"; }); </code></pre> <p>Si vous avez d'autres fonctions gestionnaires d'événements attachées à ces éléments d'entrée, que vous aimeriez également invoquer en appuyant sur la touche Entrée pour une raison quelconque, alors empêchez uniquement le comportement par défaut de l'événement au lieu de renvoyer false, afin qu'il puisse se propager correctement vers d'autres gestionnaires.</p> <pre><code>$(document).on("keydown", ":input:not(textarea)", function(event) { if (event.key == "Enter") { event.preventDefault(); } }); </code></pre> <h2>Autoriser la touche Entrée uniquement sur les zones de texte et les boutons de soumission</h2> <p>Si vous souhaitez autoriser la touche Entrée également sur les boutons de soumission <code><input|button type="submit"></code>, vous pouvez toujours affiner le sélecteur comme ci-dessous.</p> <pre><code>$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) { // ... }); </code></pre> <p>Remarquez que <code>input[type=text]</code> comme suggéré dans certaines autres réponses ne couvre pas ces entrées non textuelles HTML5, donc ce n'est pas un bon sélecteur.</p></x-turndown>
3 votes
Ne pas utiliser de balises de formulaire et faire une requête ajax personnalisée :) Mais bien sûr, vous pouvez continuer avec l'approche d'écoute des touches et de prévention, c'est ce que je ferais..
0 votes
Je n'utilise tout simplement pas les balises de formulaire car je préfère traiter les formulaires via des requêtes ajax de manière non conventionnelle (c'est-à-dire en soumettant certains champs dès qu'ils perdent le focus, etc.). Vous pouvez également ajouter un écouteur spécial pour attraper la touche Entrée et ne la traiter que si vous le souhaitez.