461 votes

Soumettre un formulaire sur 'Enter' avec jQuery ?

J'ai un formulaire de connexion standard - un champ d'adresse électronique, un champ de mot de passe et un bouton d'envoi - dans un projet AIR qui utilise HTML/jQuery. Lorsque j'appuie sur la touche Entrée du formulaire, tout le contenu du formulaire disparaît, mais le formulaire n'est pas soumis. Quelqu'un sait-il s'il s'agit d'un problème de Webkit (Adobe AIR utilise Webkit pour le HTML), ou si j'ai fait une erreur ?

J'ai essayé :

$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
  }
});

Mais cela n'a pas permis d'arrêter le comportement d'effacement, ni de soumettre le formulaire. Il n'y a pas d'action associée au formulaire - cela pourrait-il être le problème ? Puis-je mettre une fonction javascript dans l'action ?

3 votes

Avez-vous vraiment un attribut class="input" sur votre <input... ? Il me semble que ça devrait être $('input').keypress...

0 votes

Les classes sont générées de manière programmatique par un CMS. En dehors de cela, cependant, la définition de la portée de $('input') affecterait chaque entrée de la page, que je veuille ou non ce comportement. Je suis désolé que cela heurte votre sensibilité.

16 votes

Les sensibilités ne sont pas offensées le moins du monde. J'ai juste pensé que ça aurait pu être un oubli qui aurait conduit au problème. Continuez.

453voto

NoBrainer Points 1038
$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

Consultez cette réponse de stackoverflow : event.preventDefault() vs. return false

Essentiellement, "return false" est la même chose que d'appeler e.preventDefault y e.stopPropagation() .

3 votes

Notez que ce ne sont pas les mêmes. IE8 n'a pas de e.preventDefault. Pour IE8, utilisez event.returnValue = false ;

8 votes

@mbokil Sauf qu'en utilisant jQuery, c'est la même chose dans IE8. et IE7. Et IE6.

0 votes

Si vous voulez d'abord taper dans les champs de saisie, mettez le "return false ;" à l'intérieur de l'instruction if.

175voto

bendewey Points 25437

En plus des faux retours comme l'a mentionné Jason Cohen. Vous devrez peut-être aussi prévenirDefault

e.preventDefault();

14 votes

Comme l'a dit @NoBrainer, c'est faux : return false dans un événement géré par jQuery, appeler automatiquement e.preventDefault()

86voto

karim79 Points 178055

Je ne sais pas si cela vous aidera, mais vous pouvez essayer de simuler un clic sur le bouton d'envoi, au lieu de soumettre directement le formulaire. J'ai le code suivant en production, et il fonctionne bien :

    $('.input').keypress(function(e) {
        if(e.which == 13) {
            jQuery(this).blur();
            jQuery('#submit').focus().click();
        }
    });

Note : jQuery('#submit').focus() fait en sorte que le bouton s'anime lorsque l'on appuie sur la touche Entrée.

2 votes

Cela fonctionne très bien mais j'ai dû ajouter "return false ;" pour éviter la double soumission du formulaire.

1 votes

Working | Voir beaucoup de résultats comme cela parler de déclencheur, sendkey, etc, doh, blah ..., mais c'est la seule fonctionne pour moi et vraiment envoyer un clic sur un bouton. Pas submit(). Donc, le truc était les fonctions focus().click() en secuence. MERCI.

0 votes

Cela fonctionne, mais j'ai dû mettre ce code sous : $(document).ready(function() {...

62voto

Jason Cohen Points 36475

Retourner à false pour empêcher la frappe de continuer.

31voto

Zack The Human Points 5517

Y a-t-il une raison pour laquelle vous devez accrocher et tester la touche Entrée ?

Ne pourriez-vous pas simplement ajouter un

<input type="submit" /> 

à votre formulaire et faire en sorte qu'il soit naturellement soumis lorsqu'on appuie sur la touche Entrée ? Vous pourriez même accrocher la fonction onsubmit et appeler une fonction de validation à partir de là si vous le souhaitez...

Vous pourriez même utiliser le onsubmit comme un test pour voir si votre formulaire est soumis, mais cela ne fonctionnera pas si vous appelez form.submit() .

1 votes

Je suis tout à fait d'accord. Je préférerais toujours utiliser la fonctionnalité native du navigateur (les entrées de type=submit répondent nativement à une pression sur la touche Entrée) plutôt que d'ajouter d'autres scripts bâclés

1 votes

Le problème est le suivant : que se passe-t-il si vous effectuez des opérations ajax et qu'il n'y a pas de retour au serveur, mais que vous voulez que l'interface utilisateur se comporte comme l'utilisateur l'attend ?

0 votes

En effet... J'avais négligé l'ensemble return false; chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X