JS实现参数控件赋值

本文介绍如何使用JavaScript在参数界面中动态控制控件值,通过实例展示当一个控件值变化时,如何自动更新另一个控件的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS实现参数控件赋值

 

https://help.finereport.com/doc-view-1194.html

 

  

1. 描述

 

 

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


2. 思路

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

3. 操作步骤

我们制作一个简单的例子实现上图效果。

3.1 参数界面

1)新建模板,点击菜单模板-模板参数,添加两个模板参数:username和state:

2)打开参数面板,在右侧的控件设置中,点击全部添加按钮:

3)控件会自动添加到参数面板中,如下图参数面板所示:

4)将两个未定义的控件分别设置为下拉框控件和单选按钮组控件:

5)选择下拉框控件username,设置数据字典,类型设置选择自定义,实际值和显示值都为:jerny,anna,merry。

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

3.2 JS事件设置

选择下拉框控件username,添加编辑后事件,如下图所示:

JavaScript代码如下:

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。

注:移动端需要将3.2中的JavaScript代码添加到编辑结束事件中。为了PC端和移动端可以在一个模板中实现一样的效果,可以 同时添加编辑后和编辑结束事件,JS代码一样。

 

 

 

3.3 保存预览

 

保存模版,选择分页预览,实现效果如上图所示。

 

4. 预览效果

 

 

4.1 PC端预览效果

 


4.2 移动端预览效果

1)APP预览效果

2)H5预览效果

 

5. 已完成模板

 

模板效果在线查看请点击:JS实现参数控件赋值.cpt

已完成的模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\JS\参数界面JS实例\15-JS实现参数控件赋值.cpt

点击下载模板

<think>好的,我现在需要帮助用户了解如何使用JavaScript为FineReport模板的参数赋值。用户已经提供了一些引用内容,我需要仔细分析这些引用并结合自己的知识来给出准确的回答。 首先,查看用户提供的引用内容。引用[1]中的代码展示了如何通过JavaScript获取参数控件并设置其值,然后提交参数查询。这似乎是关键步骤。引用[2]和引用[3]提到了下拉框的事件处理和填报控件赋值,可能涉及参数联动和扩展单元格的处理。用户的问题集中在参数赋值,所以重点应放在引用[1]的方法上。 接下来,我需要确认FineReport参数控件的基本操作流程。通常,参数控件在模板中定义后,需要通过JavaScript API来获取和操作。根据引用[1],使用_g().getParameterContainer().getWidgetByName("参数名")可以获取参数控件对象,然后调用setValue()方法赋值。之后需要提交参数查询,使用_g().parameterCommit()。 可能需要考虑不同参数类型,比如下拉框、复选框等。对于复选框,可能需要处理多个值的格式,比如转成数组或用特定分隔符连接。引用[2]提到将值转义成复选框所需格式,这可能涉及字符串处理,如split或join方法。 此外,引用[3]中的填报控件赋值可能与参数控件不同,但用户的问题是关于参数赋值,因此应专注于参数控件的处理。不过,可能需要提醒用户注意区分参数控件和填报控件的不同API。 接下来,我需要组织步骤,从获取参数控件赋值,再到提交查询。示例代码应覆盖常见场景,如单个值、多选值以及日期格式。同时,要指出可能遇到的问题,比如参数名是否正确、值格式是否符合控件类型要求。 还需要考虑事件触发的时机,比如在编辑后事件中执行赋值和提交,或者在页面加载时初始化参数值。引用[1]和引用[2]中的例子都是在特定事件(如编辑后事件)中执行的,因此需要指导用户如何将这些代码嵌入到正确的事件处理中。 最后,生成相关问题,帮助用户进一步学习,比如参数联动、动态赋值或处理多值的情况。这些问题应基于常见的使用场景,确保覆盖用户可能遇到的后续疑问。</think>### 如何使用JavaScript为FineReport模板参数赋值 #### 核心方法说明 1. **获取参数控件对象**:使用`_g().getParameterContainer().getWidgetByName("参数名称")`方法定位参数控件[^1] 2. **赋值操作**:通过`setValue()`方法进行参数赋值,支持字符串、数组、日期等多种数据类型 3. **提交参数查询**:执行`_g().parameterCommit()`触发参数生效和报表刷新[^1] #### 完整实现步骤 ```javascript // 步骤1:获取参数控件(示例:订单ID参数) var paramWidget = _g().getParameterContainer().getWidgetByName("订单ID"); // 步骤2:设置参数值(支持多种数据类型) // 单值设置 paramWidget.setValue("ORD202307001"); // 多选参数设置(复选框适用) paramWidget.setValue(["北京", "上海", "广州"]); // 步骤3:提交参数变更(触发报表刷新) _g().parameterCommit(); // 可选步骤:处理日期类型参数 var dateParam = _g().getParameterContainer().getWidgetByName("下单日期"); dateParam.setValue("2023-07-01"); ``` #### 特殊场景处理 1. **多值参数格式转换**:当需要将字符串转换为多选数组时 ```javascript var strValues = "值1,值2,值3"; paramWidget.setValue(strValues.split(",")); ``` 2. **动态参数赋值**:根据其他控件值进行联动赋值 ```javascript // 获取来源控件值 var sourceValue = _g().getParameterContainer().getWidgetByName("地区").getValue(); // 动态生成目标参数值 var targetValue = sourceValue + "_sub"; // 设置目标参数 _g().getParameterContainer().getWidgetByName("子区域").setValue(targetValue); ``` #### 注意事项 1. 参数名称需与模板设计器中的控件名称完全一致(区分大小写) 2. 赋值后必须执行`parameterCommit()`才能触发报表刷新[^1] 3. 多选参数需要使用数组格式传值,单个值直接使用字符串即可 4. 日期格式需与模板中设置的格式保持一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值