2010-07-23 4 views
4

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.

+0

'$ (" # messages "). Empty();' au lieu de '$ (" # messages "). ReplaceWith ('

');'? –

+0

Que fait resetForm()? Ce n'est pas une méthode jQuery standard dont je suis au courant. – alexp

+0

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

Répondre

0

Avez-vous vraiment besoin d'utiliser le plugin de formulaire? Vous pourriez probablement obtenir le même effet en utilisant

$('#mt_survey').submit(function() { 
    var $this = $(this); 
    if (($this.valid() == true) || confirm("Unfinished form, continue saving as temporary?")) { 
    $.ajax({ 
     data: $this.serialize + "&table=mt_data", 
     success: function(response) { 
      $('#messages').html(response).fadeIn('slow'); //you may also need to do some processing of the response data before injecting as html 
      $('html, body').animate({ scrollTop: 0 }, 0 );} 
     }); 
     } 
    return false; 
    }); 

Et puis le débogage serait plus facile

0

IE et Opera sont la mise en cache des données et en utilisant les données du cache, c'est pourquoi vous n'êtes pas en mesure d'appeler la prochaine fois que

Modifier le code:

$('#mt_survey').ajaxSubmit({ 
    cache : false, 
    data: {table: "mt_data"}, 

Je l'ai déjà fait face à ce problème, espérons que cela vous aidera

Questions connexes