校验需求:*为必填项,同时3个必填项还要做唯一校验,即3个必填项唯一确定一条记录
待校验表单如下图,
对于以上问题,需要3个必填项校验通过,然后再做唯一校验,之前我在黑名单类型字段做唯一校验
校验规则
varblack_form = $("#black_form").validate({
rules: {
'hpzl':{required: true},
'hphm':{required: true,isCarNo:true},
'hmdlx':{required: true,
remote:{
async:false,
url: basePath+"vsas/black/isExit.do", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
hpzl: function() { return $('#hpzl').val();},
hphmt: function() {return $('#hphmt').val();},
hphm: function() {return $('#hphm').val();},
hmdlx: function() {return $('#hmdlx').val();}
}
}
}
},
......//错误信息及信息提示位置
});
varblack_form = $("#black_form").validate({
rules: {
'hpzl':{required: true},
// 'hphmt':{required: true},
'hphm':{required: true,isCarNo:true},
'hmdlx':{required: true,
remote:{
async:false,
url: basePath+"vsas/black/isExit.do", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
hpzl: function() { return $('#hpzl').val();},
hphmt: function() {return $('#hphmt').val();},
hphm: function() {return $('#hphm').val();},
hmdlx: function() {return $('#hmdlx').val();}
}
}
}
},
......//错误信息及信息提示位置
});
表单提交时,
if($("#black_form").valid()){
... ...//逻辑代码
}
但是,测试时问题出现,就是我只选择了【黑名单类型】提交,校验通过了,后台报错了,经过排查发现校验不是一个一个校验的,开始看jQuery.validate的文档找到Validator对象element(element)方法:
element(element)是验证单个元素是成功还是失败,返回值是Boolean类型。
所以,利用这个解决了以上问题,即,我先利用element(element)方法校验【号牌种类】、【号牌号码】这俩字段,然后再执行表单校验的方法。如下:
if(black_form.element($("#hpzl"))&&black_form.element($("#hphm"))&&$("#black_form").valid()){
... ...//逻辑代码
}
black_form是我们定义校验规则时,调用 validate 方法是返回的一个Validator对象。Validator 对象有很多方法,
在本例中其实还用的另一个方法resetForm():把已验证过得表单Form恢复到验证前的状态。
resetForm解决的问题:在做多个条件唯一校验时,当输入条件组合通过校验,此时form状态是校验成功状态,如果
其中某个条件内容变化时,我们应该重新校验,但是valid()方法并没有这么做,form表单状态依然是上次校验的状
态,我们就需要调用Validator的resetForm()方法来恢复form校验前的状态,重新调用valid()校验。