首页 web前端 js教程 数据分析软件之FineReport教程:[5]参数界面JS(全)_javascript技巧

数据分析软件之FineReport教程:[5]参数界面JS(全)_javascript技巧

May 16, 2016 pm 03:45 PM

在用报表工具设计报表时,使用参数控件时,有时我们希望部分参数控件在没满足条件时不显示,满足条件后再显示,接下来我就来教教大家怎么做!

表格软件如何根据条件控制参数控件是否显示

一:问题描述

在使用参数控件时,有时我们希望部分参数控件在没满足条件时不显示,满足条件后再显示,如下图效果:只有前面的下拉款选择了内容之后,后一层下拉框控件才显示出来:

二:解决方案

首先将被控制的控件初始化为不可见或者不可用,然后在条件控件上增加编辑结束事件,通过js脚本设置被控制控件可见或可用,对应的js方法如下:

setEnable(boolean):设置是否可用,true为可用,false为不可用;

setVisible(boolean):设置是否可见,true为可见,false为不可见;

三:示例

打开模板%FR_HOME%WebReportWEB-INFreportletsdocparameterMutiValue.cpt

我们用这个模板中的area作为条件控件,province作为被控控件来说明设置过程。

四:初始化被控控件为不可见

点击province控件,选择属性表>基本属性将可见勾选掉,如下图:

五:条件控件的事件设置

给area控件添加编辑后事件,调用JS方法将province控件设定为可见,具体的代码如下:

选择参数area的下拉框控件,选择属性表的事件面板,增加一个编辑结束事件,如下图:

图中的代码内容是:

其中代码为:

1

2

3

4

var province=this.options.form.getWidgetByName("province");                                      var area=this.options.form.getWidgetByName("area");

var thislen = this.getValue(area).length;

if(thislen) province.setVisible(true);

else alert("请选择地区");

登录后复制

日期控件校验JS

一:概述

内置参数查询界面当中可进行一些数据校验,例如有两个参数:开始日期和结束日期,下面我们要校验的是:开始日期与结束日期不能为空,结束日期必须在开始日期之后以及结束日期必须在开始日期后的某个时间段内,否则提示相关信息,对此可以在查询按钮中增加事件。下面介绍下具体的设置。

具体效果图如下:

步骤阅读

具体错误见效果图报错警告。

二:打开模板

打开模板:%FR_HOME%WebReportWEB-INFreportletsdocParameterTimeScaleTimeScale.cpt。

如下图参数界面:

 


三:增加事件

给查询按钮增加点击事件,具体的JS代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

var start = this.options.form.getWidgetByName("starttime").getValue();

var end = this.options.form.getWidgetByName("endtime").getValue();

if( start == "" || start==null){ //判断开始日期是否为空

 alert("错误,开始时间不能为空"); //开始日期参数为空时提示

 return false;

};

if(end == "" || end==null){ //判断结束日期是否为空

 alert("错误,结束时间不能为空"); //结束日期参数为空时提示

 return false;

};

if( start > end){ //判断开始日期是否大于结束日期

 alert("错误,开始时间不能大于结束时间"); //开始日期大于结束日期时提示

 return false;

}

var startdate = new Date(start); //将开始日期转化为Date型

var enddate = new Date(end); //将结束日期转化成Date型

var subdate = (enddate-startdate)/ (1000 *60 *60 *24); //将两个日期相减得出的毫秒数转化为天数

if(subdate>15){ //判断结束日期是否超过开始日期后15天

alert("错误,结束日期必须在开始日期15天之内"); //结束日期超过开始日期后的十五天时提示

return false;

}

登录后复制

注:虽然参数控件中也可以设置校验,但是参数控件要点击控件后才能进行校验,因此参数界面的不能为空以及比较校验需要在查询按钮中设置。

四:效果查看

分页预览模板,选择开始时间和结束时间,使这两个日期之间相差超过15天,就会弹出上述对话框。

注:上述js代码在火狐,谷歌IE9等浏览器下没有问题,但是在IE8以及IE8以下的ie浏览器版本中时判断两个日期之间的差值的警告框则不会起作用。可用以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

var start = this.options.form.getWidgetByName("starttime").getValue();

var end = this.options.form.getWidgetByName("endtime").getValue();

if( start == "" || start==null){ //判断开始日期是否为空

 alert("错误,开始时间不能为空"); //开始日期参数为空时提示

 return false;

};

if(end == "" || end==null){ //判断结束日期是否为空

 alert("错误,结束时间不能为空"); //结束日期参数为空时提示

 return false;

};

if( start > end){ //判断开始日期是否大于结束日期

 alert("错误,开始时间不能大于结束时间"); //开始日期大于结束日期时提示

 return false;

}

var aDate = start.split("-")

var startdate = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为MM-dd-yyyy格式

alert(startdate);

var aDate = end.split("-")

var enddate = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])

alert(enddate);

var subdate= ((enddate - startdate) /1000/ 60/60/24) //把相差的毫秒数转换为天数

alert(subdate);

if(subdate>15){ //判断结束日期是否超过开始日期后15天

alert("错误,结束日期必须在开始日期15天之内"); //结束日期超过开始日期后的十五天时提示

return false;

}

登录后复制

清空(重置)条件

一:问题描述

在使用控件时,有时我们希望能够快捷的重置控件的内容,或者重置所有控件的内容,效果如下图所示:

二:解决方案

只重置一个控件的值时,我们可以在js事件中获取需要重置的控件,执行reset()方法,从而清空该控件的内容。

当我们需要重置全部控件时,可以通过form.name_widgets获取参数界面上所有的控件,然后遍历每个控件并重置,代码如下:

1

2

3

$.each(this.options.form.name_widgets,function(i,item){

 if (item.options.type !=='label') {item.setValue();item.setText();}

});;

登录后复制
登录后复制

三:重置单个控件内容的按钮

以上图中清空供应商按钮为例,说明如何重置单个控件内容。

在参数设计页面新建一个按钮控件,设定其名字为清空供应商,同时设置按钮点击事件,将供应商(supplierID)控件内容清空,具体的js如下:

1

2

var supplierID = this.options.form.getWidgetByName("supplierID"); //获取supplierID控件

supplierID.reset(); //将supplierID控件内容清空

登录后复制

四:重置所有控件内容
在参数界面新建一个按钮控件,设定其名字为清空全部,同时设置按钮点击事件,事件js脚本为:

1

2

3

$.each(this.options.form.name_widgets,function(i,item){

 if (item.options.type !=='label') {item.setValue();item.setText();}

});;

登录后复制
登录后复制

隐藏参数界面向上向下的三角按钮

一:问题描述

我们在预览带有参数面板的模板的时候,会发现其参数界面与主体界面交接处有一个三角按钮,那么如何隐藏该按钮呢?

二:解决思路

在模板加载结束后,拿到该按钮元素,然后设置其隐藏,或者直接去掉即可。

隐藏按钮

1

$('.parameter-container-collapseimg-up').hide();

登录后复制

去掉按钮

1

$('.parameter-container-collapseimg-up').remove();

登录后复制

三:示例

我们以GettingStarted.cpt模板为例,想要在模板展示的时候就隐藏参数界面的三角按钮。

打开设计器,双击该模板,切换到参数面板编辑界面,单击一下参数面板的空白处,选中参数面板,添加一个初始化后事件,如下图:

四:js代码如下:

1

2

3

setTimeout(function() {

 $('.parameter-container-collapseimg-up').hide();

}, 10);

登录后复制

五:效果查看

保存模板,点击预览,即可看到三角按钮不再显示,如下图:

参数控件赋值

一:概述

参数界面中,往往需要在一个控件中动态的控制其他控件的值,如下图,当username有值时,state自动变为1,否则变为2::

二:解决方案

可以通过js脚本获取到需要的控件,从而获得控件的值,及给控件赋值。

注:不能给控件置数为0,JS里面,0表示false。且一个控件无法对另一个控件的显示值进行置数。

三:参数界面

如下图参数界面

username控件类型为下拉框,数据自定义,实际值和显示值都为:jerny,anna,merry。

state控件类型选择单选按钮组,数据也为自定义,实际值和显示值都为:1,2。

四:JS事件设置

在username的事件编辑中添加编辑后事件,JS代码如下:

1

2

3

4

5

6

7

var state= this.options.form.getWidgetByName("state");

var username = this.options.form.getWidgetByName("username").getValue();

if (!username){

state.setValue(2);

}else{

state.setValue(1);

}

登录后复制

该段代码是用来对state参数置数,当username为空时,!username为真,此时将state置数为2,否则当username有值时,将state置数为1。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

前端开发中如何实现类似 VSCode 的面板拖拽调整功能? 前端开发中如何实现类似 VSCode 的面板拖拽调整功能? Apr 04, 2025 pm 02:06 PM

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...

See all articles