JS

在finereport 设计器中有下拉框控件a、组件1、组件2、组件3,组件全部默认可见状态,在控件的事件写一段js实现当:

控件a=1时,组件2、组件3隐藏

控件a=2时,组件1、组件3隐藏

控件a=3时,组件1、组件2隐藏

以下js未能实现效果,有没有懂js的大佬帮忙看看哪里出问题了,

var a = fr.getElement("a").getValue(); // 获取控件a的值

// 根据控件a的值,隐藏对应的组件

if (a === "1") {

  fr.getElement("component2").setVisible(false); // 隐藏组件2

  fr.getElement("component3").setVisible(false); // 隐藏组件3

} else if (a === "2") {

  fr.getElement("component1").setVisible(false); // 隐藏组件1

  fr.getElement("component3").setVisible(false); // 隐藏组件3

} else if (a === "3") {

  fr.getElement("component1").setVisible(false); // 隐藏组件1

  fr.getElement("component2").setVisible(false); // 隐藏组件2

}

FineReport duangpen 发布于 2023-4-27 10:46
1min目标场景问卷 立即参与
回答问题
悬赏:6 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
duangpenLv4见习互助
发布于2023-4-27 13:40

a=this.getValue();

if (a=='1'){

_g().getWidgetByName('JS').setVisible(true);

_g().getWidgetByName('JS2').setVisible(true);

_g().getWidgetByName('WEIT1').setVisible(false);

_g().getWidgetByName('WEIT2').setVisible(false);

_g().getWidgetByName('AMOUNT1').setVisible(false);

_g().getWidgetByName('AMOUNT2').setVisible(false);

}

else if (a=='2'){

_g().getWidgetByName('JS').setVisible(false);

_g().getWidgetByName('JS2').setVisible(false);

_g().getWidgetByName('WEIT1').setVisible(true);

_g().getWidgetByName('WEIT2').setVisible(true);

_g().getWidgetByName('AMOUNT1').setVisible(false);

_g().getWidgetByName('AMOUNT2').setVisible(false);

}

else if (a=='3'){

_g().getWidgetByName('JS').setVisible(false);

_g().getWidgetByName('JS2').setVisible(false);

_g().getWidgetByName('WEIT1').setVisible(false);

_g().getWidgetByName('WEIT2').setVisible(false);

_g().getWidgetByName('AMOUNT1').setVisible(true);

_g().getWidgetByName('AMOUNT2').setVisible(true);

}

以上js实现了标题中的隐藏逻辑,但是报表预览初始界面,js获取不到控件的默认值,需要在组件2、组件3,的初始化中通过_g().getWidgetByName('').setVisible();单独设置隐藏。

最佳回答
1
FANSHUzwLv5中级互助
发布于2023-4-27 11:13(编辑于 2023-4-27 11:15)

var form = this.options.form;

var Period = form.getWidgetByName("Period").getValue();

if(Period=="Realtime"){

Daily.setVisible(true);

Daily.setEnable(false);

Weekly.setVisible(false);

Monthly.setVisible(false);

label0.setVisible(true);

MTD.setVisible(false);

}

改一下你的,你参考一下,这个if 你根据你实际的写就行,ture就是设置可见,false设置的是不可见

最佳回答
0
l香菜lLv4见习互助
发布于2023-4-27 10:50

排查思路:

先打印获取控件a的值 是否正常获取

if判断 == 就行了

还有获取到的值是字符串还是数字 

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-4-27 11:08
最佳回答
0
YmengLv5中级互助
发布于2023-4-27 11:14(编辑于 2023-4-27 11:15)

获取组件接口是_g().getWidgetByName("组件名")

把代码里的fr.getElement("")全改成_g().getWidgetByName("")

  • 3关注人数
  • 293浏览人数
  • 最后回答于:2023-4-27 13:40
    请选择关闭问题的原因
    确定 取消
    返回顶部