web-dev-qa-db-fra.com

jQuery: arrêter de soumettre le formulaire, exécuter le script, continuer à soumettre le formulaire?

J'ai un formulaire et lorsque je le soumets, 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 à envoyer le formulaire (qui est arrêté avec e.preventDefault();) après //many scripts?

Je vous remercie

18
Tuizi

$("#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
}
17
Adrian J. Moreno

Lorsque vous appelez $("#RequestCreateForm").submit(), le script exécutera à 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 instruction conditionnelle, sinon cela se produira toujours et annulera votre e.preventDefault(); en haut.

23
Chris
$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) 
    { 
         e.preventDefault();
         return false; 
    }        

    //other scripts

}
6
Bhanu Krishnan
$("#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();

}
1
Stan Quinn

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

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

Voici mon approche pour éviter la boucle infinie.

  • Dans le formulaire, j'utilise un "bouton" avec un identifiant (par exemple <input type="button" id="submit" value="submit"/>) pour imiter le bouton d'envoi;
  • 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;
  }
});
0
Emk

Toutes les solutions ici sont trop compliquées ou conduisent à une erreur javascript, la plus simple et la plus claire solution 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
}); 
0
jave.web