2013-10-04 21 views
0

我創建表單驗證並檢查電子郵件地址是否存在以返回true或false,然後驗證其他字段但它不返回true,因此我無法自動驗證其他字段或提交表單驗證沒有完成所有下面的代碼無法在ajax中返回true

function check_regemail(){ 
var email = $("#regemail").val(); 
if((email.length < 6) || 
(email.indexOf('@',0) < 1) || 
(email.lastIndexOf('@') != email.indexOf('@',0)) || 
(email.lastIndexOf('@') > (email.length - 5)) || 
(email.lastIndexOf('.') > (email.length - 3)) || 
(email.lastIndexOf('.') < (email.length - 4)) || 
(email.indexOf('..',0) > -1) || 
(email.indexOf('@.',0) > -1) || 
(email.indexOf('[email protected]',0) > -1) || 
(email.indexOf(',',0) > -1)){ 
$("#regemail").css("border","1px solid #F00"); 
return false; 
} 
else{ 
    var ajax = false; 
ajax = new XMLHttpRequest(); 
ajax.open("GET","checkmail.php?email="+email); 
ajax.onreadystatechange = function(){ 
    if(ajax.readyState == 4 && ajax.status == 200){ 
     var response = ajax.responseText; 
     if(response.indexOf('exists') !== -1){ 
      $("#regemail").css("border","1px solid #F00"); 
      return false; 
     } 
     else{ 
      $("#regemail").css("border","1px solid #ccc"); 
      return true;  
     } 
    } 
} 
ajax.send(null);    
} 
} 


function validate_reg(){ 
$.each($('form#myform :input'),function(){ 
$(this).blur().change(); 
}); 
if(!check_regemail() || !check_user() || !check_regpass() || !confirm_pass() || !check_country()){ 
return false; 
} 
else{ 
return true 
} 
} 

各個領域應驗證,當我點擊提交,但它並沒有發生,提交表單不起作用認爲所有的領域都有正確的數據

回答

1

此問題是因爲腳本不等待ajax完成。我會建議您重寫您的代碼以驗證Ajax成功回調中的其他字段:

if(ajax.readyState == 4 && ajax.status == 200){ 
    var response = ajax.responseText; 
    if(response.indexOf('exists') !== -1) { 
     //email fails, so no need to validate other fields 
     $("#regemail").css("border","1px solid #F00"); 
    } else { 
     //email passes, so validate other fields 
     $("#regemail").css("border","1px solid #ccc"); 

     //validate other fields 
     if(!check_user() || !check_regpass() || !confirm_pass() || !check_country()) { 
      //handle code when validation fails 
     } else { 
      //code if validation passes 
     } 
    } 
}