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.
<input type="button" id="submit" value="submit"/>
Ex. <input type="button" id="submit" value="submit"/>
) pour imiter le bouton de soumission; $('#submit').click(function() { if(//validation rules is ok) { $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm } else { return false; } });