正常情况下,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点: