jquery函数返回问题,在线等

fw347969680 2012-05-26 03:35:56
我想用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();
}
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
右领军大都督 2012-05-27
  • 打赏
  • 举报
回复
当然,上面解决方案存在一个问题,就是各个检验方法之间存在了依赖关系,所以无法再单独使用了,我想你可能还要根据需要再做优化。我建议你试着读读JQuery 的 validation插件的文档,可以的话,直接使用这个插件好了,不要再自己费力气解决这种设计性的问题了。
还有,你上面的问题,success里的返回值为什么没有作为checkXXX的返回值, 原因是这样的,你code当中,对于JQuery中ajax的用法属于异步用法,并且success里的内容,仅为该验证操作异步执行,并成功获取结果后的回调函数,它与checkXXX本身并无关系,也就是说,checkXXX在执行到ajax部分时,并无等待success的结果,而是直接顺序执行下去,该方法就结束了。至于success是何时执行完毕的,与checkXXX压根没有关系。所以success里的返回值就不会作为checkXXX的返回值出现了。
不知道解释的是否清晰,还望谅解
右领军大都督 2012-05-27
  • 打赏
  • 举报
回复
抱歉,一时半会根据你的情况没有想到更好的解决方案,在不多修改你的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();
}
op100100 2012-05-26
  • 打赏
  • 举报
回复
js ajax 执行是异步的,

$.ajax( {
type : "post",
async:false,
url : "validateEmail.action",
dataType : "xml",
data : {
email : email
},
修改为同步试下
还有你的checkEmail() 并没有返回值的
fw347969680 2012-05-26
  • 打赏
  • 举报
回复
我找到原因了,我的问题和下面这个链接的一样,是ajax内有返回的问题。希望有高手知道。http://zhidao.baidu.com/question/165316748.html
001007009 2012-05-26
  • 打赏
  • 举报
回复
ajax 返回的 data 是怎样的内容
fw347969680 2012-05-26
  • 打赏
  • 举报
回复
我试了下,好像是这里的错。
success : function(data) {
if ($(data).text() == "success") {
return true;
} else {
$("#checkEmail").html("<font color='red'>账号已存在</font>");
return false;
}
return true返回不到checkEmail(),直接返回在function(data)地方了。
fw347969680 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

我刚才试过了,chechkEmail可以返回true的。
乌镇程序员 2012-05-26
  • 打赏
  • 举报
回复
只执行checkEmail()说明这个函数一直返回false,检查一下是代码的问题还是输入的问题。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧