2009-12-15 6 views
1

J'utilise ce code pour soumettre un formulaire à un script php:jquery - javascript valeur de la variable ne tenant pas

var valid = 'true'; 
$(document).ready(function(){ 
    $("#contact").submit(function(){ 
    $.post("process.php", 
     $("#contact").serialize(), 
     function(data){ 
     if(data.email_check == 'invalid'){ 
      valid = 'false'; //<---not set! 
      $("#email1").addClass('missing'); 
      $("#message_ajax") 
      .html("<div class='errorMessage'>Sorry is NOT a valid e-mail address. Try again.</div>"); 
     } else { 
      $("#message_ajax") 
      .html("<div class='errorMessage'>YES! this is A valid e-mail address. DO NOT Try again.</div>"); 
     } 
     }, "json" 
    ); 

    if(valid == 'true'){ 
     $("#contact").hide(); 
    } 

    return false; 
    }); 
}); 

Je sais le script retourne la valeur « invalide » parce que la div et css sont mis à jour comme prévu, mais la variable 'valide' n'est jamais définie sur 'false'. Pensant que c'était une question de portée, j'ai déplacé la déclaration et si la déclaration autour sans joie.

Problème connexe possible - J'utilise firebug pour parcourir le code, mais il s'arrête seulement à mon point d'arrêt la première fois que le code est exécuté, et plus jamais, mais je peux soumettre le formulaire autant de fois que nécessaire. répond toujours comme prévu - valide ou invalide. Comme vous pouvez le voir, je suis très nouveau à jQuery.

Répondre

6

Vous mélangez du code synchrone et asynchrone ici.

if(valid == 'true'){ 
    $("#contact").hide(); 
}  

return false; 

Ce code ^^^ exécute avant le rappel function(data) est jamais appelé.

Fondamentalement, ce qui se passe est ceci:

  • $ .post court
  • if ('true' == valide) est évaluée
  • .submit (fonction retourne false
  • ) La fonction de rappel (données) est appelé
  • La variable 'valide' est définie
+0

+1 merci. Donc, si je comprends, je dois mettre la logique qui cache le formulaire dans le bloc de fonction (données)? Finalement, j'aurai plusieurs entrées à valider et je veux seulement cacher le formulaire si tout passe. – jriggs

+0

@jriggs - Oui, exactement. Gardez à l'esprit qu'il y aura un délai entre le $ .post et la fonction (data), donc vous pourriez aussi vouloir ajouter un petit message demandant à l'utilisateur d'attendre, puis de le cacher après le rappel. –

Questions connexes