2009-12-15 53 views
1

我使用這個代碼提交表單的PHP腳本:jQuery的 - JavaScript變量未持有價值

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; 
    }); 
}); 

我知道腳本返回「無效」的價值,因爲div和CSS更新如預期的那樣,但「有效」變量永遠不會被設置爲「假」。我認爲這是一個範圍問題,我已經提出了聲明,如果聲明沒有喜悅。

可能出現的相關問題 - 我使用螢火蟲遍歷代碼,但它只是在第一次執行代碼時停止在我的斷點處,並且永遠不會再次執行,但我可以提交表單任意次數總是按預期做出響應 - 有效或無效。正如你所看到的,我對jQuery非常陌生。

回答

6

您在這裏混合了同步代碼和異步代碼。

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

return false; 

此代碼^^^在回調function(data)被調用之前運行。

基本上發生的事情是這樣的:

  • $。員額運行
  • 如果(有效== '真')被評爲
  • .submit()函數返回false
  • 回調函數(數據)被稱爲
  • 「有效」變量設置爲
+0

+1謝謝。所以如果我明白了,我需要把隱藏表單的邏輯放在函數(數據)塊中?最終我會有幾個輸入來驗證,我只想隱藏表單,如果全部通過。 – jriggs 2009-12-15 20:00:54

+0

@jriggs - 確實。請記住$ .post和函數(data)之間會有延遲,因此您可能還想添加一條要求用戶等待的消息,然後在回調被觸發後隱藏該消息。 – 2009-12-15 20:16:56