报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

之前发过一篇博客,也是解决报表中控件值刷新不及时的问题,经过后续的项目需求和项目实施,博主终于又发现另一种方法,可以在点击按钮时,移出光标,快速获取控件值,同样也达到了解决控件值刷新不及时的效果。

移出光标,意味着不管界面上有多少个控件,都可以不用在各个控件上单独写JS,只需要在按钮上(或超链接)添加一个点击的JS事件,即可一次性搞定,避免重复开发,报表更容易维护,提高开发效率,实用性更强。

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

在一些含有较多控件的报表中,点击按钮时,需要触发事件,使前端把控件中的数据传给后台处理时。按常规做法,如果在点击按钮时,不事先移出光标,会导致最后一个控件只能获取到旧的控件值,即表明控件值刷新不及时;如果之前我的博客中的方法,确实可以解决控件值刷新不及时的问题,这个的开发效率和维护成本,对控件只有三两个的情况还是挺友好的,但是对有比较多控件的报表,就会大大降低开发效率,维护成本也涨了很多。如下图,就要给20来个控件写JS事件,费力不讨好。

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

博主接下来介绍的这种方法,是只需要在按钮控件(或其他超链接)中加入点击的JS事件,在JS事件中,巧妙使用setTimeout()和其他自定义funtion()结合,就可以移出光标,及时刷新控件值,获取到最新的控件值,不受控件的数量、控件的类型、控件的位置所影响,一步到位,提高开发效率,极大地降低了开发成本。

1、报表界面设计:

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

开发人员可以自定义整个报表界面,此处获取控件值可以是支持所有控件,不同控件的控件值获取方法,可以参考我前面的博客https://blog.****.net/wang1qqqq/article/details/85694695,本次示例为文本控件。在按钮控件中,按钮是用来触发后台执行事件的,此处只示例获取到所有控件值,并弹窗显示出获取到的控件值。

2、javascripts事件编辑:

优化前部分正常部署,只是普通的获取控件值的方法,然后拼接控件值,弹窗返回;

优化后也同样也采用普通的获取控件值的方法,不过需要将获取控件值的方法,跟setTimeout()函数结合起来,就可以达到获取值之前移出光标的效果,及时刷新控件值。

(一)优化前

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

代码如下:

var mc=contentPane.getCellValue(2,1);
var xb=contentPane.getCellValue(2,2);
var nl=contentPane.getCellValue(2,3);
var jg=contentPane.getCellValue(2,4);
alert("姓名:"+mc+";性别:"+xb+";年龄:"+nl+";籍贯:"+jg);

(二)优化后

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

代码如下:

function remove(){
    function work(){
        var mc=contentPane.getCellValue(6,1);
        var xb=contentPane.getCellValue(6,2);
        var nl=contentPane.getCellValue(6,3);
        var jg=contentPane.getCellValue(6,4);
        alert("姓名:"+mc+";性别:"+xb+";年龄:"+nl+";籍贯:"+jg);
    }
    return work;
}
var work=remove()
setTimeout(work,0)

3、效果图:

报表:JS实现填写后自动移出光标,解决控件值刷新不及时(实用性更强,适用于所有控件、大小型填报表)

如上,在按钮(或其他超链接)中添加点击事件,使用JS中的setTimeout()函数和预定义的获取值事件结合,就可以及时移出光标,及时刷新控件值,获取当前最新的控件值,准确无误地将前端数据传给后台,由后台根据数据执行后台预定义的行为。

这种做法实现了移出光标,及时刷新控件值的效果,还更加优化了及时刷新控件值的方法,JS只需要一步到位,避免代码重复开发,提高了开发效率,降低开发成本,大大提高了报表的实用性,也方便了开发人员对报表的维护。