JS更改报表默认校验顺序
背景
在参数模板中做了三个输入参数,其中要求按照三个参数的顺序进行非空校验,即:若三个参数均为空,提示第一个参数应为非空;若后两个为空,提示第二个参数应为非空。
分析
润乾报表提供了校验的功能,我们且看在报表中设置了三个参数的校验后的效果。发现三个均为空的时候提示了第三个参数应为非空,跟需求的顺序不一致。查看报表源文件发现如下代码:
function form1_checkValid() {
if( ! ( testTiaoJian(3) ) ) {
alert( ‘请选择法人公司!‘ );
return false;
}
if( ! ( testTiaoJian(1) ) ) {
alert( ‘请选择计薪期!‘ );
return false;
}
if( ! ( testTiaoJian(2) ) ) {
alert( ‘请选择公司!‘ );
return false;
}
return true;
}
也就是说报表中校验的顺序是三一二的顺序。实际验证中发现这个顺序是不固定的,有的时候是三二一的顺序。如何实现需求中规定的顺序呢?本文给出一种实现方法,即每次判读第二个参数的时候先判断第一个参数,只有第一个参数条件满足的时候才判断第二个条件是否满足,判断第三个的时候先判断前两个。以下是实现方法。
实现
1 参数报表制作
F1和I1单元格校验依次写入:testTiaoJian(2)和testTiaoJian(3),以及出错提示。
2 在页面中的testTiaoJian()函数的实现
function testTiaoJian(col/*标识是第几个校验*/)
{
//alert(col);
var inputTag = document.getElementById(“form1_tbl”).getElementsByTagName(“input”);//页面上表单所处以form1_tbl为ID的table中,此处获取该table下所有input域
if(col==1){//报表中的第一个校验
if(inputTag[0].value==“” || inputTag[0].value==null){//获取第一个参数输入框内值
return false;
}
return true;
}
if(col==2){//报表中的第二个校验
if(testTiaoJian(1)){//只有第一个校验返回true时才判断第二个校验;否则直接返回true
if(inputTag[2].value==“” || inputTag[2].value==null){//获取第二个参数输入框内值
return false;
}
}
return true;
}
if(col==3){//报表中的第三个校验
if(testTiaoJian(2) && testTiaoJian(1)){//只有第一个校验和第二个校验都返回true时,才进行第三个校验;否则返回true
if(inputTag[4].value==“” || inputTag[4].value==null){//获取第三个参数输入框内值
return false;
}
}
return true;
}
return true;
}
效果
三个都不输入的情况
后两个不输的情况
最后一个不输的情况