Comment faire pour capturer la touche enter enfoncée sur les pages contenant plusieurs formes?
J'ai hérité d'une application web où l'habitude de la capacité appuyer sur la touche retour dans les champs de saisie a été désactivé pour la très bonne raison que la page contient plusieurs formes, et l'application ne serait pas en mesure de déterminer (ou, si l'on me dit), qui forme à l'action. L'application a été conçu il y a donc pas de présenter des boutons (comme dans input type="submit") et, au lieu de cela, les concepteurs ont opté pour onclick la manipulation. Voici deux boutons qui sont définis sur une des pages, inclus à des fins d'illustration
<input type="button" value="LOGIN" name="btnLoginOk" onclick="submit(); />"
<input type="button" class="button-click-grey" value="Find Link Partners"
onclick="raiseEvent('SubmitForm','',this);" style="cursor:pointer;" />
Mais je veux vraiment être en mesure de permettre aux utilisateurs d'appuyer sur la touche retour, si elles le souhaitent par exemple, si ils ont tapé juste dans un champ associé à la CONNEXION, puis de détecter et d'action de la onclick="submit();"
Peut-être il ya une solution avec jQuery.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous appuyez sur entrée sur l'entrée de contrôler le navigateur cherche le premier bouton soumettre dans cette forme et simule un clic sur elle. Dans le cas de plusieurs boutons, le premier sera pressée sur le clavier d'entrée (ce n'est pas écrit dans la pierre et les navigateurs peuvent déroger à ce principe).
Si vous avez deux formes, l'une qui a une pression de touche devra c'est d'abord présenter le bouton enfoncé. Par conséquent, vous n'avez pas vraiment besoin de gestion spécifique de ce. Vous avez juste à arrêter d'être sur le chemin.
Vous pouvez simuler ce code, sur un formulaire:
Ou d'une fenêtre (pour une démonstration de ce qui se passe à peu près):
En supposant bien sûr que
.preventDefault()
n'a pas été appelé sur l'événement.Bottom line: Si vous avez l'événement vous pouvez divine quel élément il vient et donc sur la forme à laquelle il appartient. Même dans ce cas:
Ici
submit()
est une fonction globale, mais lorsqu'il est appelé, de son contexte (this
) sera l'élément et vous pouvez fairesubmit(e){ this.form.submit(); }
.Cela me semble être le concepteur ne comprenons pas pleinement DOM /forme des événements et va le long de la façon de contourner le problème. Une autre raison pourrait être que le programme est ancien et a été conçu en arrière quand ces choses n'étaient pas comme stable, ou bien documentées, comme ils le sont aujourd'hui.
Remplacer ceci:
Avec ceci:
Puis ajouter un gestionnaire de touches pour toutes les formes qui en ont besoin, qui détecte et supprime entrer, si une certaine condition est remplie (pour les formulaires que vous avez réellement ne voulez désactiver cette sur).
Ou encore mieux: Utiliser un formulaire de validation de la bibliothèque (ou plugin jQuery) qui sait comment faire cela pour vous.
Vous pouvez lier la clé de la conférence de presse pour Entrer la clé dans le jquery :
Croise les doigts pour ce travaillerez
Je ne pense pas que vous avez besoin de jQuery ou javascript pour cela. En effet, vous pouvez détecter ce qui Forme un utilisateur accède à soumettre, ou même qui les soumettre bouton est frappé (dans le cas où il y a plus d'un bouton d'envoi par formulaire).
Voici le code à utiliser:
Puis pour la forme de traitement de script, il vous suffit de vérifier le nom du bouton submit, par exemple:
Alternativement, vous pouvez utiliser les images que présenter des boutons, vous pouvez utiliser le même nom pour tous les boutons submit, et il suffit de vérifier leurs valeurs, vous pouvez aussi le faire avec d'normal boutons submit, si chaque bouton a une unique
value
attribut.Edit:
Une autre méthode est de combiner la POSTE et OBTENIR les valeurs, c'est à dire: