Comment empêcher une ENTERpression sur une touche de soumettre un formulaire dans une application Web?
javascript
events
user67722
la source
la source
Voici un gestionnaire jQuery qui peut être utilisé pour arrêter la saisie de soumissions, et également arrêter la touche de retour arrière -> retour. Les paires (keyCode: selectorString) dans l'objet "keyStop" sont utilisées pour faire correspondre les nœuds qui ne doivent pas déclencher leur action par défaut.
N'oubliez pas que le Web doit être un endroit accessible, ce qui brise les attentes des utilisateurs de clavier. Cela dit, dans mon cas, l'application Web sur laquelle je travaille n'aime pas le bouton retour de toute façon, donc désactiver son raccourci clavier est OK. La discussion «devrait entrer -> soumettre» est importante, mais n'est pas liée à la question réelle posée.
Voici le code, à vous de réfléchir à l'accessibilité et pourquoi vous voudriez vraiment le faire!
la source
Renvoyez simplement false du gestionnaire onsubmit
ou si vous voulez un gestionnaire au milieu
la source
submit
bouton<form>
de se faire soumis tout est de jeter le bébé avec l'eau du bain.la source
e.preventDefault()
plutôt que d'return false
atteindre la même fin mais permettre à l'événement d'atteindre les gestionnaires dans les éléments parents. L'action par défaut (sommation de formulaire) sera toujours empêchéeVous devrez appeler cette fonction qui annulera simplement le comportement d'envoi par défaut du formulaire. Vous pouvez le joindre à n'importe quel champ de saisie ou événement.
la source
La touche ENTRÉE active simplement le bouton d'envoi par défaut du formulaire, qui sera le premier
le navigateur trouve dans le formulaire.
Par conséquent, vous n'avez pas de bouton d'envoi, mais quelque chose comme
ÉDITER : En réponse à la discussion dans les commentaires:
Cela ne fonctionne pas si vous n'avez qu'un seul champ de texte - mais il se peut que ce soit le comportement souhaité dans ce cas.
L'autre problème est que cela s'appuie sur Javascript pour soumettre le formulaire. Cela peut être un problème du point de vue de l'accessibilité. Cela peut être résolu en écrivant le
<input type='button'/>
avec javascript, puis en mettant un<input type='submit' />
dans un<noscript>
balise. L'inconvénient de cette approche est que pour les navigateurs sans Javascript, vous aurez alors des soumissions de formulaire sur ENTER. C'est au PO de décider quel est le comportement souhaité dans ce cas.Je ne connais aucun moyen de le faire sans invoquer du tout javascript.
la source
En bref, en Javascript pur:
Cela désactive uniquement l'action de la touche "Entrée" pour le type d'entrée = "texte". Les visiteurs peuvent toujours utiliser la touche "Entrée" sur tout le site Web.
Voir ma réponse détaillée pour une question similaire ici
la source
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Avec le code spécifié, il permettra de soumettre des formulaires si une radio ou une case à cocher sont ciblées.Toutes les réponses que j'ai trouvées à ce sujet, ici ou dans d'autres articles, ont un inconvénient, c'est qu'elles empêchent également le déclencheur de changement réel sur l'élément de formulaire. Donc, si vous exécutez ces solutions, l'événement onchange n'est pas déclenché également. Pour surmonter ce problème, j'ai modifié ces codes et développé le code suivant pour moi. J'espère que cela deviendra utile pour les autres. J'ai donné une classe à mon formulaire "prevent_auto_submit" et ajouté le JavaScript suivant:
la source
Je l'ai toujours fait avec un gestionnaire de touches comme le précédent, mais aujourd'hui j'ai trouvé une solution plus simple. La touche Entrée déclenche simplement le premier bouton d'envoi non désactivé du formulaire, donc en fait tout ce qui est requis est d'intercepter ce bouton en essayant de soumettre:
C'est tout. Les frappes seront traitées comme d'habitude par le navigateur / champs / etc. Si la logique enter-submit est déclenchée, le navigateur trouvera ce bouton de soumission caché et le déclenchera. Et le gestionnaire javascript empêchera alors la soumission.
la source
hidden
en entrée serait plus court. bon hack :)J'ai passé un peu de temps à créer ce navigateur croisé pour IE8,9,10, Opera 9+, Firefox 23, Safari (PC) et Safari (MAC)
Exemple JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/
Code de base - Appelez cette fonction via "onkeypress" attaché à votre formulaire et passez "window.event" dedans.
la source
Ensuite sur votre formulaire:
Cependant, il serait préférable que vous n'utilisiez pas un JavaScript intrusif.
la source
charCode
. J'ai également déplacé l'return false
intérieur du bloc if. Bonne prise.Dans mon cas, ce jQuery JavaScript a résolu le problème
la source
<input>
champs du formulaire?Empêcher «ENTRER» d'envoyer le formulaire peut gêner certains de vos utilisateurs. Il serait donc préférable de suivre la procédure ci-dessous:
Écrivez l'événement «onSubmit» dans votre balise de formulaire:
écrire la fonction Javascript comme suit:
Quelle que soit la raison, si vous souhaitez empêcher la soumission du formulaire en appuyant sur la touche Entrée, vous pouvez écrire la fonction suivante en javascript:
Merci.
la source
Ajoutez cette balise à votre formulaire -
onsubmit="return false;"
Ensuite, vous ne pouvez soumettre votre formulaire qu'avec une fonction JavaScript.la source
Pour éviter la forme soumettre lorsque vous appuyez sur enterune
textarea
ouinput
envoi de champ , vérifiez l'événement submit pour trouver le type d'élément qui a envoyé l'événement.Exemple 1
HTML
jQuery
Une meilleure solution est si vous n'avez pas de bouton d'envoi et que vous déclenchez l'événement avec un bouton normal. C'est mieux parce que dans le premier exemple, 2 événements de soumission sont déclenchés, mais dans le deuxième exemple, un seul événement de soumission est déclenché.
Exemple 2
HTML
jQuery
la source
Vous trouverez cela plus simple et utile: D
la source
Que diriez-vous:
la source
Veuillez consulter cet article Comment empêcher la touche ENTRÉE de soumettre un formulaire Web?
la source
Vous pouvez piéger le keydown sur un formulaire en javascript et empêcher même le bouillonnement, je pense. ENTRER sur une page Web soumet simplement le formulaire dans lequel le contrôle actuellement sélectionné est placé.
la source
Ce lien fournit une solution qui a fonctionné pour moi dans Chrome, FF et IE9 ainsi que l'émulateur pour IE7 et 8 fourni avec l'outil de développement d'IE9 (F12).
http://webcheatsheet.com/javascript/disable_enter_key.php
la source
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Une autre approche consiste à ajouter le bouton de saisie d'envoi au formulaire uniquement lorsqu'il est censé être soumis et à le remplacer par un simple div lors du remplissage du formulaire
la source
Ajoutez simplement cet attribut à votre balise FORM:
Ensuite, dans votre balise SCRIPT, ajoutez ceci:
Ensuite, lorsque vous effectuez un bouton ou pour toute autre raison (comme dans une fonction), vous autorisez enfin une soumission, il vous suffit de retourner le booléen global et d'effectuer un appel .submit (), similaire à cet exemple:
la source
Je l'ai rencontré moi-même parce que j'ai plusieurs boutons de soumission avec différentes valeurs de «nom», de sorte que lorsqu'ils sont soumis, ils font des choses différentes sur le même fichier php. Le bouton
enter
/return
rompt cela car ces valeurs ne sont pas soumises. Je pensais donc, le boutonenter
/return
active-t-il le premier bouton de soumission du formulaire? De cette façon, vous pourriez avoir un bouton d'envoi 'vanille' qui est soit caché soit a une valeur 'nom' qui renvoie le fichier php en cours d'exécution à la page avec le formulaire dedans. Ou bien une valeur de «nom» par défaut (masquée) que la touche active, et les boutons de soumission écrasent avec leurs propres valeurs de «nom». Juste une pensée.la source
Que diriez-vous:
Et il suffit de nommer votre bouton à droite et il sera toujours soumis, mais les champs de texte, c'est-à-dire explicitOriginalTarget lorsque vous appuyez sur retour en un, n'auront pas le bon nom.
la source
Cela a fonctionné pour moi.
onkeydown = "retour! (event.keyCode == 13)"
la source
Voici comment je le ferais:
la source
mettre dans un fichier externe javascript
ou quelque part à l'intérieur de la balise du corps
la source
J'ai eu le même problème (formulaires avec des tonnes de champs de texte et des utilisateurs non qualifiés).
Je l'ai résolu de cette façon:
en utilisant cela dans le code HTML:
De cette façon, la
ENTER
clé fonctionne comme prévu, mais une confirmation (un deuxièmeENTER
appui, généralement) est requise.Je laisse aux lecteurs la quête d'un script envoyant l'utilisateur dans le champ où il a appuyé
ENTER
s'il décide de rester sur le formulaire.la source