J'ai un problème sur ma page avec le code s'exécutant plusieurs fois dans IE et Opera, bien qu'il fonctionne dans FF, Chrome et Safari. J'utilise le dernier jQuery, le plugin de validation et le plugin de formulaire. Mon code provient de HTML suivant:Le code s'exécute plusieurs fois dans IE/Opera
<form action="/case_study/php/survey_submit.php" id="mt_survey" method="post">
...
...
<fieldset id="submit_button_box">
<input id="submit_button" type="submit" value="Submit Case Data" />
</fieldset></form>
Lorsque je clique sur le bouton d'envoi, il doit exécuter la jquery suivante:
$('#mt_survey').submit(function() {
if (($("#mt_survey").valid() == true) || confirm("Unfinished form, continue saving as temporary?")) {
$('#mt_survey').ajaxSubmit({
data: {table: "mt_data"},
target: '#messages',
success: function() {
$('#messages').fadeIn('slow');
$('html, body').animate({ scrollTop: 0 }, 0 );}
});
}
return false;
});
Maintenant, cela fonctionne quand je clique sur le bouton Envoyer première fois. À ce stade, le formulaire est effacé pour le jeu de données suivant. Ceci est fait en suivant le code.
$('#clear_form').click(function() {
$("#mt_survey").resetForm();
$("#messages").replaceWith('<div id="messages"></div>');
$("#messages").hide();
$("#escort_div").hide();
$("#transport_a_div").hide();
$("#transport_l_div").hide();
$("#item_div").hide();
$("#item2_div").hide();
$("label.error").hide();
$("#correction_button").attr('disabled', 'disabled');
$("#submit_button").attr('disabled', '');
});
Maintenant, une fois cela fait, le formulaire get est de nouveau rempli, et soumettre est de nouveau cliqué. Mais cette fois dans IE et Opera le code pour cela s'exécute plusieurs fois. Je sais avec certitude qu'il fonctionne plusieurs fois depuis que j'ai vérifié en mettant des alertes dedans, mais surtout il appelle mon fichier "survey_submit.php" plusieurs fois et insère des données dans MySQL. Des idées pourquoi? Cela me tourmente depuis longtemps et je ne vois aucune raison de le faire.
'$ (" # messages "). Empty();' au lieu de '$ (" # messages "). ReplaceWith ('
');'? –Que fait resetForm()? Ce n'est pas une méthode jQuery standard dont je suis au courant. – alexp
Je recommande de créer un "compteur" dans le jquery et le mettre à 1 si une copie temporaire du formulaire doit être sauvegardée, sinon, par défaut 0. Sur .submit {}, vérifiez la valeur du compteur et arrêtez la soumission avant qu'elle ne soit à l'action = "" cible basée sur ce qui a été fait précédemment. – Ortund