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
$("#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 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.
$("#RequestCreateForm").submit(function (e) {
if ($("#RequestCreateForm").validate().checkForm() == false)
{
e.preventDefault();
return false;
}
//other scripts
}
$("#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();
}
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');
}
});
Voici mon approche pour éviter la boucle infinie.
<input type="button" id="submit" value="submit"/>
) pour imiter le bouton d'envoi;$('#submit').click(function() { if(//validation rules is ok) { $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm } else { return false; } });
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
});