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();
}
...全文
186 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,检查一下是代码的问题还是输入的问题。
大家好,又见面了!EasyUI又更新了,这次更新内容还是不少的,具体内容请参考下面的更新说明,官方的更新说明中还少了1条,我给补上了。 jQuery EasyUI 1.3.5版本更新内容: Bug(修复) searchbox:修复“searcher”函数提供的“name”参数值错误的问题; combo:修复“isValid”方法无法返回布尔值的问题; combo:修复点击页面某一个combo组件的下拉列表时触发的“onHidePanel”事件会导致页面上其他combo组件的下拉列表被关闭的问题; combogrid:修复某些从combo组件继承来的方法无法使用的问题。 Improvement(改进) datagrid:改进检查行时候的性能; menu:允许追加菜单分隔符; menu:新增“hideOnUnHover”属性用于在鼠标离开菜单的时候指示是否需要隐藏菜单; slider:新增“clear”和“reset”方法; tabs:新增“unselect”方法、“onUnselect”事件; tabs:新增“selected”属性,用于指定的默认打开的面板; tabs:Tab Panel(Tab页)新增“collapsible”属性,用于设置是否允许摺叠面板; tabs:新增“showHeader”属性、“showHeader”方法和“hideHeader”方法; combobox:允许“disabled”属性禁用下拉列表选项; tree:改进数据加载时候的性能; pagination:新增“layout”属性,用于自定义控件的样式布局; accordion:新增“unselect”方法、“onUnselect”事件; accordion:新增“select”和“multiple”属性; accordion:新增“getSelections”方法; datebox:新增“sharedCalendar”属性,允许多个datebox控件共享使用同一个calendar控件。 datebox:新增“buttons”属性,用于自定义日历下方的按钮。 (译者注:该点更新内容官方更新公告上没有注明,具体内容和用法请看datebox的API。) 历史版本: - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/6302785 - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/5363933

87,992

社区成员

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

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