jquery.validate校验问题--组合条件唯一校验

来源:互联网 发布:java mq原理图 编辑:程序博客网 时间:2024/06/07 02:54

问题描述

校验需求:*为必填项,同时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()校验。


0 0
原创粉丝点击