2012-12-15 71 views
1

我一直在使用JavaScript驗證器,但由於某種原因,evalid始終返回false,即使它已通過驗證......這是一個錯誤,如果evalid爲false,表單不提交。JavaScript驗證錯誤?

function signup_validate() 
    { 
     document.getElementById("email_error").innerHTML = ""; 
     document.getElementById("password_error").innerHTML = ""; 
     evalid = false; 
     pvalid = false; 
     email = null; 
     pass = null; 
     confpass = null; 
     email=document.forms["signup_form"]["email"].value.replace(/^\s+|\s+$/g, ''); 
     atpos=email.indexOf("@"); 
     dotpos=email.lastIndexOf("."); 
     pass=document.forms["signup_form"]["pass"].value; 
     confpass=document.forms["signup_form"]["confpass"].value; 
      if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) 
      { 
       document.getElementById("email_error").innerHTML = "<span class='required'>Email must be valid.</span>"; 
      } 
      else 
      { 
       $.post('/resources/forms/signup.php',{email: email}, function(data){ 
        if(data.exists){ 
         document.getElementById("email_error").innerHTML = "<span class='required'>This email is already in use.</span>"; 
        } 
        else 
        { 
         evalid = true; 
        } 
       }, 'JSON'); 
      } 
      if (pass!=""&&pass!=null&&confpass!=""&&confpass!=null&&confpass==pass) 
      { 
       pvalid = true; 
      } 
      else 
      { 
       document.getElementById("password_error").innerHTML = "<span class='required'>Both passwords must match and cannot be left blank.</span>"; 
      } 
      alert(evalid); 
      if (evalid == true && pvalid == true) 
      { 
       document.getElementById("signup_form").submit(); 
      } 
      else 
      { 
       return false; 
      } 
     } 

我能錯過什麼?

+0

你在哪裏返回evalid。我看到的是你的功能到最後並且什麼都不返回。 – CrazyCasta

+0

你爲什麼不宣佈任何變量?你好'var'? – elclanrs

回答

3

設置「evalid」爲true的唯一時刻是在異步運行的函數中。換句話說,當你設置「evalid」爲true時,主函數已經達到了最後。

,你可以嘗試使用$.ajax代替$.post和使用參數async:false

嘗試是這樣的:

$.ajax({ 
    type: 'POST',  
    url: '/resources/forms/signup.php', 
    data: {email: email}, 
    success: function(response){ 
     //your function here 
    }, 
    dataType:'JSON', 
    async:false 
}); 
+0

好的,那我該如何糾正呢?我明白你要去哪裏,因爲它現在很有意義。 – user115422

+0

即時通訊有點新的JavaScript,所以我不知道該解決方案將是什麼。 – user115422

+0

@fermionoid:你有兩個選擇。 1.做一個同步請求。 2.使用回調。 – elclanrs