上个示例,用到的是同一个表里的多个值参与验证。
实际应用中,还会出现一种多表联合验证的情况。例如,某系统后台数据库有两个数据表“预算”和“支出”。其中,“预算”表结构如下:
“支出”表结构如下:
现在要建立一个表单,并在表单中用到“科目”、“支出”和“日期”3个输入框,以便输入数据,向“支出”表添加数据行。输入数据时,需要对“支出”的输入数值进行验证,只要“支出”表里的当前科目支出累计值没有超过“预算”表里的相同科目预算值,就属于正常,数据可以添加;否则输入数据无效,并给出“超出预算”的类似提示。这就属于多表数据的调用验证。以下是示例代码:
function(value,item){
let km =
$(item).closest('form').find('input[name=科目]').val(); //得到表单里的科目输入值
let ys = "(select 预算 from 预算 where
科目='" + km + "')";
//获取预算值
let zc = "(select sum(支出) from
支出 where 科目='" + km + "')"; //获取支出汇总值
//远程验证
let
msg;
$.ajax({
url:'query',
type:'post',
dataType:'json',
async:false,
data:{
dtsource:'{{test|支出}}',
tj:Number(value) + '>' + ys + '-' +
zc //此为验证条件
},
success:function(res){
//根据服务器返回值进行判断,如果返回值不为0,表示验证条件成立
if(res.count) msg = '输入的数据已经超过额度预算!'
}
});
if(msg) return
msg;
}
上述代码的关键在于验证条件。此条件如果用文字表述的话,意思就是:
输入值 > 预算总额 - 支出总额
如果此条件成立,就表示输入值已经超过了余下的可使用预算额度,那么返回的count值肯定不会为0,验证没有通过;否则验证通过。