我想用checkAll()来验证邮箱密码和验证码,但是每次运行的时候都只执行了checkEmail(),后面的函数就不执行了。求高手帮忙看下。还想要看更多的代码的话,告诉下我。function checkEmail() {
var email = $("#email").attr("value");
var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; //电子邮箱正则表达式
$("#checkEmail").html("");
if(email==''|| email!=""&&!reg.test(email)){
   $("#checkEmail").html("<font color='red'>请输入正确的邮箱</font>");
   return false;
}else{
$.ajax( {
type : "post",
url : "validateEmail.action",
dataType : "xml",
data : {
email : email
},
success : function(data) {
if ($(data).text() == "success") {
        return true;
           } else {
            $("#checkEmail").html("<font color='red'>账号已存在</font>");
            return false;
         }
         }
});
}
}
    
     function checkPwd() {
        alert("XXX");
var password = $("#password").attr("value");
$("#checkPwd").html("");
if(password==''|| password.length>20 || password.length<6){
   $("#checkPwd").html("<font color='red'>密码必须由6-20个字符组成</font>");
   return false;
}
else
   return true;
}
    
function checkCode() {
var code = $("#code").attr("value");
$("#checkCode").html("");
$.ajax( {
type : "post",
url : "validateRandomNumber.action",
dataType : "xml",
data : {
code : code
},
success : function(data) {
if ($(data).text() == "success") {
        return true;
           } else {
            $("#checkCode").html("<font color='red'>验证码错误</font>");
            return false;
         }
         }
});
}

function checkAll(){
        if(checkEmail()&&checkPwd()&&checkName()&&checkBirth()&&checkUname()&&checkDname()&&checkCode())
$("#registerForm").submit();
}

解决方案 »

  1.   

    只执行checkEmail()说明这个函数一直返回false,检查一下是代码的问题还是输入的问题。
      

  2.   


    我刚才试过了,chechkEmail可以返回true的。
      

  3.   

    我试了下,好像是这里的错。
    success : function(data) {
     if ($(data).text() == "success") {
     return true;
     } else {
     $("#checkEmail").html("<font color='red'>账号已存在</font>");
     return false;
     }
    return true返回不到checkEmail(),直接返回在function(data)地方了。
      

  4.   

    ajax 返回的 data 是怎样的内容
      

  5.   

    我找到原因了,我的问题和下面这个链接的一样,是ajax内有返回的问题。希望有高手知道。http://zhidao.baidu.com/question/165316748.html
      

  6.   

    js ajax 执行是异步的, $.ajax( {
    type : "post",
    async:false,
    url : "validateEmail.action",
    dataType : "xml",
    data : {
    email : email
    },
    修改为同步试下
    还有你的checkEmail() 并没有返回值的
      

  7.   

    抱歉,一时半会根据你的情况没有想到更好的解决方案,在不多修改你的code的基础上,code如下:var index = 0;
    var methods = [];
    function checkEmail() {
       index++;
       var email = $("#email").attr("value");
       var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; //电子邮箱正则表达式
       $("#checkEmail").html("");
       if(email==''|| email!=""&&!reg.test(email)){
           $("#checkEmail").html("<font color='red'>请输入正确的邮箱</font>");
           return false;
       }else{
          $.ajax( {
             type : "post",
             url : "validateEmail.action",
             dataType : "xml",
             data : {
             email : email
             },
             success : function(data) {
                if ($(data).text() == "success") {
                   if(methods[index]){
          methods[index]();
       }
                } else {
                   $("#checkEmail").html("<font color='red'>账号已存在</font>");
                }
             }
          });
       }
    }
         
    function checkPwd() {
       index++;
       var password = $("#password").attr("value");
       $("#checkPwd").html("");
       if(password==''|| password.length>20 || password.length<6){
           $("#checkPwd").html("<font color='red'>密码必须由6-20个字符组成</font>");
       }
       else{
           if(methods[index]){
      methods[index]();
       }
       }
    }
         
    function checkCode() {
       index++;
       var code = $("#code").attr("value");
       $("#checkCode").html("");
       $.ajax( {
          type : "post",
          url : "validateRandomNumber.action",
          dataType : "xml",
          data : {
          code : code
          },
          success : function(data) {
             if ($(data).text() == "success") {
                if(methods[index]){
           methods[index]();
            }
             } else {
                $("#checkCode").html("<font color='red'>验证码错误</font>");
             }
         }
       });
    }function submit(){
       $("#registerForm").submit();
    }methods = [checkEmail , checkPwd , checkCode , submit];
     
    function checkAll(){
        checkEmail();
    }
      

  8.   

    当然,上面解决方案存在一个问题,就是各个检验方法之间存在了依赖关系,所以无法再单独使用了,我想你可能还要根据需要再做优化。我建议你试着读读JQuery 的 validation插件的文档,可以的话,直接使用这个插件好了,不要再自己费力气解决这种设计性的问题了。
    还有,你上面的问题,success里的返回值为什么没有作为checkXXX的返回值, 原因是这样的,你code当中,对于JQuery中ajax的用法属于异步用法,并且success里的内容,仅为该验证操作异步执行,并成功获取结果后的回调函数,它与checkXXX本身并无关系,也就是说,checkXXX在执行到ajax部分时,并无等待success的结果,而是直接顺序执行下去,该方法就结束了。至于success是何时执行完毕的,与checkXXX压根没有关系。所以success里的返回值就不会作为checkXXX的返回值出现了。
    不知道解释的是否清晰,还望谅解