日期:2014-05-16  浏览次数:20468 次

jquery函数返回问题,在线等
我想用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();
}

------解决方案--------------------
只执行checkEmail()说明这个函数一直返回false,检查一下是代码的问题还是输入的问题。
------解决方案--------------------
ajax 返回的 data 是怎样的内容
------解决方案--------------------
js ajax 执行是异步的, 

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