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

问题描述

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


你可能感兴趣的:(jquery.validate校验问题--组合条件唯一校验)