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 参数报表制作

F1I1单元格校验依次写入:testTiaoJian(2)testTiaoJian(3),以及出错提示。

2 在页面中的testTiaoJian()函数的实现

function testTiaoJian(col/*标识是第几个校验*/)

{

//alert(col);

var inputTag = document.getElementById(“form1_tbl”).getElementsByTagName(“input”);//页面上表单所处以form1_tblIDtable中,此处获取该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;

}

效果

三个都不输入的情况

后两个不输的情况

最后一个不输的情况

热门文章