2013-10-04 2 views
0

양식 유효성 검사를 만들고 이메일 주소를 확인하면 true 또는 false를 반환하고 다른 필드의 유효성을 검사하지만 true를 반환하지 않으므로 자동으로 다른 필드의 유효성을 검사하거나 제출할 수 없습니다. 폼 검증은 모두 여기에 완료되지 않습니다 내가 제출을 클릭하면아약스 내에서 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의 성공 콜백 내에서 다른 필드의 유효성을 검사하도록 코드를 다시 작성하는 것이 좋습니다.

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 
     } 
    } 
} 
관련 문제