将jquery validate校验框架的remote异步验证设置为同步校验
2014-09-25 15:44
681 查看
最近公司的项目中都是使用的jquery validate在做表单,感觉确实非常好用,很灵活,用起来很顺手。但也遇到了不少问题。在此记录一下。
问题:当提交表单触发校验的时候,remote校验规则的结果不能及时返回,导致校验通过。
场景:
在机构管理的修改页面中,负责柜员要做有效性校验。代码如下:
//校验是否重复
remote: {
url: "ciforg/checkManTlr", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
manTlr: function() {
return $("input[name='manTlr']").val();
},
bdtTdt: function() {
return $("input[name='bdtTdt']").val();
}
}
}
当输入一个不合法的值后,直接点击提交,触发整个表单的校验。
预计出现的情况是:弹出提示框,“输入错误,请检查”。
实际情况是:校验先通过,弹出确认修改的确认提示框,然后负责柜员的校验结果才显示出来。(负责柜员的文本框变红出现在确认弹窗之后)
原因分析:使用remote异步校验,当点击提交时,$("#ciforg").validate().form();方法没有等remote方法校验完,就返回了结果true。
那么怎么让remote异步校验变成同步校验,及时返回校验结果呢?
代码如下:
{CSDN:CODE:rules:{
manTlr:{//校验输入的柜员号是否存在
rangelength:[6,6],
digits:true,
//校验是否重复
remote: {
url: "ciforg/checkManTlr", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
cache:false,
async:false,
data: { //要传递的数据
manTlr: function() {
return $("input[name='manTlr']").val();
},
bdtTdt: function() {
return $("input[name='bdtTdt']").val();
}
}
}
}}
关键是加上上图的红色部分的属性就好了。
当然你还可以使用自定义的方法,在其实使用ajax,设置同步来完成校验。
jQuery.validator.addMethod("phonesame", function(value, element) { //用jquery ajax的方法验证电话是不是已存在
var flag = 1;
$.ajax({
type:"POST",
url:'tel.php',
async:false, //同步方法,如果用异步的话,flag永远为1
data:{'tel':value},
success: function(msg){
if(msg == 'yes'){
flag = 0;
}
}
});
if(flag == 0){
return false;
}else{
return true;
}
}, "sorry number have been exist");
问题:当提交表单触发校验的时候,remote校验规则的结果不能及时返回,导致校验通过。
场景:
在机构管理的修改页面中,负责柜员要做有效性校验。代码如下:
//校验是否重复
remote: {
url: "ciforg/checkManTlr", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
manTlr: function() {
return $("input[name='manTlr']").val();
},
bdtTdt: function() {
return $("input[name='bdtTdt']").val();
}
}
}
当输入一个不合法的值后,直接点击提交,触发整个表单的校验。
预计出现的情况是:弹出提示框,“输入错误,请检查”。
实际情况是:校验先通过,弹出确认修改的确认提示框,然后负责柜员的校验结果才显示出来。(负责柜员的文本框变红出现在确认弹窗之后)
原因分析:使用remote异步校验,当点击提交时,$("#ciforg").validate().form();方法没有等remote方法校验完,就返回了结果true。
那么怎么让remote异步校验变成同步校验,及时返回校验结果呢?
代码如下:
{CSDN:CODE:rules:{
manTlr:{//校验输入的柜员号是否存在
rangelength:[6,6],
digits:true,
//校验是否重复
remote: {
url: "ciforg/checkManTlr", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
cache:false,
async:false,
data: { //要传递的数据
manTlr: function() {
return $("input[name='manTlr']").val();
},
bdtTdt: function() {
return $("input[name='bdtTdt']").val();
}
}
}
}}
关键是加上上图的红色部分的属性就好了。
当然你还可以使用自定义的方法,在其实使用ajax,设置同步来完成校验。
jQuery.validator.addMethod("phonesame", function(value, element) { //用jquery ajax的方法验证电话是不是已存在
var flag = 1;
$.ajax({
type:"POST",
url:'tel.php',
async:false, //同步方法,如果用异步的话,flag永远为1
data:{'tel':value},
success: function(msg){
if(msg == 'yes'){
flag = 0;
}
}
});
if(flag == 0){
return false;
}else{
return true;
}
}, "sorry number have been exist");
相关文章推荐
- jquery.validate.js校验框架中的验证用户名是否可用
- 利用struts2的json返回方式来控制jquery.validate的remote框架,进行表单验证
- 利用jQuery.validate异步验证用户名是否存在
- 在ssh2整合框架中,客户端使用jquery validate ajax验证用户名是否重复时,出现问题。 请指教!
- jquery.validate remote 和 自定义验证方法
- 利用jQuery.validate异步验证用户名是否存在
- [转载]jquery.validate.js remote 数据远程验证
- js validate验证框架,不依赖jquery等
- jquery validate 验证框架 addMethod
- jquery.validate remote 和 自定义验证方法
- 利用jquery.validate异步验证用户名是否存在
- jquery.validate.js是jquery旗下的一个验证框架
- 由jQuery Validation Remote验证引起的错误(MVC3 jQuery.validate.unobtrusive)
- 配置超简单的Jquery form validate验证框架(修改与扩展)
- jquery.validate 扩展验证+异步验证
- JQuery扩展插件Validate—2通过参数设置验证规则
- jquery.validate remote 和 自定义验证方法
- jquery-validate remote验证,返回不同的消息内容
- jQuery.Validate表单验证校验-说明
- jquery---------ajax+validate表单异步提交验证