jQuery: Arrêt de la soumission de formulaire, d'exécuter le script, de poursuivre la soumission de formulaire?
J'ai un formulaire, et quand je soumettre lui-je exécuter des script multiples. Voici mon code:
$("#RequestCreateForm").submit(function (e) {
if ($("#RequestCreateForm").validate().checkForm() == false) { return; }
e.preventDefault();
//many scripts
//How to continue submitting?
}
Est-il possible de continuer à soumettre le formulaire (qui est arrêté avec e.preventDefault();
) après //many scripts
?
Merci
supprimer l'e.preventDefault(); et vous fera obtenir l'effet désiré.
cela va à l'encontre du but de son code.
L'OP n'a pas mentionné si oui ou non les scripts sont fait de manière asynchrone. Si ils ne le sont pas, alors vous n'avez pas besoin de la
Ok je le conçois. 🙂 Mais si les scripts sont synchrones (ce qui est l'hypothèse depuis il na pas utiliser ajax ou certains autres asynchrone technique), puis le temps de la soumission serait important. Auquel cas wouldnt preventDefault() est-elle nécessaire? Si vous l'enlevez, le formulaire sera soumis avant sa scripts sont faites en cours d'exécution. (Corrigez-moi si je me trompe).
cela va à l'encontre du but de son code.
L'OP n'a pas mentionné si oui ou non les scripts sont fait de manière asynchrone. Si ils ne le sont pas, alors vous n'avez pas besoin de la
e.preventDefault();
. Si elles le sont, alors vous pouvez les tirer par $.ajax
et utiliser le formulaire de rappel pour continuer sur, qui serait encore dire que vous n'avez pas besoin de la e.preventDefault();
.Ok je le conçois. 🙂 Mais si les scripts sont synchrones (ce qui est l'hypothèse depuis il na pas utiliser ajax ou certains autres asynchrone technique), puis le temps de la soumission serait important. Auquel cas wouldnt preventDefault() est-elle nécessaire? Si vous l'enlevez, le formulaire sera soumis avant sa scripts sont faites en cours d'exécution. (Corrigez-moi si je me trompe).
OriginalL'auteur Tuizi | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
Cette plante le navigateur.
Mise à jour le retour";" "return false;" par Bhanu Krishnan réponse. Aussi que "==" doit être "===".
Question a été édité - cela fonctionne maintenant. Notez que vous n'avez pas à faire
return false;
si vous êtes en développement pour les navigateurs modernes seulement 🙂OriginalL'auteur
Lorsque vous appelez
$("#RequestCreateForm").submit()
, le script s'exécutera seulement par le gestionnaire d'événements de nouveau, et de provoquer une boucle infinie (comme Koen a souligné dans un commentaire sur la accepté de répondre). Donc, vous devez supprimer le gestionnaire d'événements avant de soumettre:La dernière ligne doit être dans une instruction conditionnelle, sinon ça va juste toujours le cas, et d'annuler votre
e.preventDefault();
en haut.OriginalL'auteur
OriginalL'auteur
OriginalL'auteur
Pour éviter de soumettre boucles, une variable supplémentaire doit être utilisé.
OriginalL'auteur
Toutes les solutions sont ici trop compliqué ou conduire à une erreur javascript, plus simple et plus claire solution, je suppose:
OriginalL'auteur
Voici ma méthode pour éviter la boucle infinie.
<input type="button" id="submit" value="submit"/>
) pour imiter le bouton soumettre;OriginalL'auteur
retour; est la même chose que l'e.preventDefault();
essayer
return
n'est pas le même quee.preventDefault();
.return
est aussie.stopPropagation();
qui tue les événements de la bulle.e.preventDefault();
permet toujours à des événements à bulle, d'où la différence.OriginalL'auteur