JQuery: Arrêtez-vous de soumettre un formulaire, exécutez un script, continuez de soumettre un formulaire?

J'ai un formulaire, et quand je le soumet, j'exécute plusieurs scripts. 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 ?

Je vous remercie

 $("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() === false) { e.preventDefault(); //form was NOT ok - optionally add some error script in here return false; //for old browsers } else{ //form was OK - you can add some pre-send script in here } //$(this).submit(); //you don't have to submit manually if you didn't prevent the default event before } 

Lorsque vous appelez $("#RequestCreateForm").submit() , le script passera à nouveau le gestionnaire d'événements et provoquera une boucle infinie (comme Koen l'a souligné dans un commentaire sur la réponse acceptée). Donc, vous devez supprimer le gestionnaire d'événements avant de soumettre:

 $("#RequestCreateForm").on('submit', function (e) { e.preventDefault(); // do some stuff, and if it's okay: $(this).off('submit').submit(); }); 

La dernière ligne doit être dans une déclaration conditionnelle, sinon elle va toujours se produire, et e.preventDefault(); votre e.preventDefault(); au sommet.

 $("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() == false) { return false; } e.preventDefault(); //many scripts $(this).trigger('submit'); } 
 $("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() == false) { return; } e.preventDefault(); //many scripts // Bypass the jquery form object submit and use the more basic vanilla // javascript form object submit $("#RequestCreateForm")[0].submit(); } 

revenir; Est la même chose que e.preventDefault ();

essayer

 $("#RequestCreateForm").trigger('submit'); 

Pour éviter les boucles de soumission, une variable supplémentaire devrait être utilisée.

 var codeExecuted = false; $('#RequestCreateForm').submit(function(e) { ... if(!codeExecuted){ e.preventDefault(); ... functionExecuted = true; $(this).trigger('submit'); } }); 

Toutes les solutions ici sont trop compliquées ou entraînent une erreur javascript, une solution plus simple et plus claire . Je suppose:

 jQuery("#formid").submit(function(e) { if( ! (/*check form*/) ){ //notice the "!" e.preventDefault(); //a bit of your code } //else do nothing, form will submit }); 

Voici mon approche pour éviter la boucle infinie.

  • Dans le formulaire, j'utilise un "bouton" avec un identifiant (p <input type="button" id="submit" value="submit"/> Ex. <input type="button" id="submit" value="submit"/> ) pour imiter le bouton de soumission;
  • Dans le script, j'ai quelque chose comme ça:
 $('#submit').click(function() { if(//validation rules is ok) { $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm } else { return false; } });