Previous topicNext topic
WebBuilderX > 子页面组件元素 > 表单类元素 > 验证规则 >
多值验证示例

正常情况下,WebBuilderX的验证规则仅对当前绑定的输入框有效,也就是仅验证当前输入框所输入的值是否符合规则。

但在某些时候,需要同时验证多个输入值,怎么办?如下图所示,要同时验证姓名、部门、性别和兴趣爱好4个字段,只要后台存在4个字段内容完全相同的记录,就认为它是重复的,就不允许提交:

这时就要多值同时验证了。

多值验证其实也很简单,因为自定义验证函数已经自带两个传值变量:value和item,通过这两个变量就能玩转整个表单。以下是本示例的完整代码,已经加了详细说明,只要具备基本的js基础就可以看得懂:

function(value,item){
        //当前绑定的输入框
       let name = $(item).attr('name'); //得到绑定输入框的name属性值
       if(name==='select'){ //如果name为select,表示选择输入框,需要重新赋值
          name = $(item).closest('div').attr('name');
       }
       let tj = name + "='" + value + "'";  //生成绑定输入框的查询条件
        //参与查询的其他字段
       let fields = ['部门','性别','兴趣爱好']; //字段名,注意大小写
       let form = $(item).closest('form'); //当前表单
       fields.forEach(field => {
          let eld = form.find('[name=' + field + ']');
          if(eld.length){ //如果表单中存在此输入框元素,就遍历它
              let arr = []; //用于保存多选输入框的值
              eld.each(function(){
                  let type = $(this).attr('type');
                  if(!type){ //type不存在时,表示这是选择输入框
                      value = $(this).find('input').val();
                      if(value) tj += " and " + field + "='" + value + "'";
                  }else if(type==='radio'){  //如果是单选输入框
                      if($(this).prop('checked')){
                          value = $(this).attr('title');
                          if(value) tj += " and " + field + "='" + value + "'"; 
                      }
                  }else if(type==='checkbox'){  //如果是多选输入框
                      if($(this).prop('checked')) arr.push($(this).attr('title'));
                  }else{ //其他输入框,也可以根据text、number、date等其他类型继续判断区分
                      value = $(this).val();
                      if(value) tj += " and " + field + "='" + value + "'";
                  }
              })
              if(arr.length) tj += " and " + field + "='" + arr.toString() + "'";
          }
       })
        //远程请求验证
       let msg;
       $.ajax(
           //写法同前。只要注意一点,这里的tj无需再拼接,直接用tj:tj即可
       )
       if(msg) return msg;
   }

本示例代码包括3个部分:第1部分用于生成当前绑定输入框的查询条件;第2部分用于拼接生成其他指定字段的查询条件;第3部分就是将生成的查询条件通过ajax提交服务器,并根据返回值进行判断处理。由此可见,本段代码的关键在于第2部分,也就是根据添加的其他字段名称自动生成多值查询条件。

本代码的通用性已经很强了。如果看不懂其中的意思,只要复制下来直接使用即可。使用时必须注意以下3点