不刷新整个页面,只动态刷新下拉框的值

楼主
我是社区第70504位番薯,欢迎点我头像关注我哦~
       常常有这样的情况出现,下拉框里面的值是前面一个步骤产生的数据,所以下拉框的数据是随时变化的,那么你要是不刷新页面的话,下拉框里面的值就不会变。而每次都要去刷新一下页面,这个操作是非常不友好的!
      今天就介绍一种不用刷新页面就可以刷新下拉框的值的方法,此方法脱胎于下拉框联动。
       首先在你正式用的下拉框那里加上编辑前事件 ,然后再隐藏掉作为中间人的那个单元格E3。   
  1. var k=contentPane.curLGP.getCellValue("E3");
  2. var m=k+1;

  3. contentPane.setCellValue("E3",null,m);
复制代码


        意义很简单,每次编辑前,得到E3的值,然后加1再传给E3。并且一定要给E3加上下拉框和初始值1!
       然后在你的sql语句里面拼一句肯定是成功的语句例如这种:select id from b  where rownum<${E3}+50   。这是oracle 的写法,简单来说就是要带这个E3参与一下sql,但是不影响sql的结果。注意这里的50,要根据你的实际情况来修改,比如你数据量大概是1000条,那么就改为1000,。上面是第一种写法,经过和女神@cherishdqy 的讨论,女神提出了select id from b  where 0!=${E3}这种写法,这样就不用管行号,成了一个通用的例子了,大佬出手就是厉害!另外提一点,这个条件最好是第一个条件,这样执行效率最高(oracle是这样)。不管是填报页面还是参数面板这种方法都适用,语句稍微有点不同。  
  1. var k=this.options.form.getWidgetByName("M").getValue();
  2. var m=k+1;
  3. this.options.form.getWidgetByName("M").setValue(m);
复制代码
       这样就实现了,不用刷新这个页面下拉框的值也可以刷新。
       还有一点,现实中一般都习惯enter来左右切换选中控件(帆软是tab),然后enter来确定下拉框的选中项(帆软是tab)。估计帆软是考虑冲突的原因才选择tab,但是这种有点不方便,没有遵从用户的操作习惯。下面的js加到加载起始可以将tab换成enter,目前没有发现什么冲突的地方,除了和FR内置的查询按钮快捷键冲突,不过这个js一般是为了填报顺畅,大家自己取舍一下,也可以自定义查询按钮和他的快捷键。这样才满足操作员的操作习惯
      
  1. FR.ComboBoxEditor.prototype._onKeyDown = function (c) {

  2.                 var b = c.data;
  3.                 switch (c.keyCode) {
  4.                 case FR.keyCode.DOWN:
  5.                         if (!b.isExpanded()) {
  6.                                 b.onTriggerClick()
  7.                         } else {
  8.                                 if (b.focusIndex == undefined) {
  9.                                         b.focusIndex = b._getSelectedIndex() || 0
  10.                                 }
  11.                                 if (b.focusIndex < (b.considerAllowBlankLength() - 1)) {
  12.                                         b._setItemFocus(b.focusIndex + 1, b.focusIndex);
  13.                                         b.focusIndex = b.focusIndex + 1
  14.                                 } else {
  15.                                         b._setItemFocus(0, b.focusIndex);
  16.                                         b.focusIndex = 0
  17.                                 }
  18.                         }
  19.                         c.stopEvent();
  20.                         break;
  21.                 case FR.keyCode.UP:
  22.                         if (b.isExpanded()) {
  23.                                 if (b.focusIndex == undefined) {
  24.                                         b.focusIndex = b._getSelectedIndex()
  25.                                 }
  26.                                 if (b.focusIndex - 1 >= 0) {
  27.                                         b._setItemFocus(b.focusIndex - 1, b.focusIndex);
  28.                                         b.focusIndex = b.focusIndex - 1
  29.                                 } else {
  30.                                         b._setItemFocus(b.considerAllowBlankLength() - 1, b.focusIndex);
  31.                                         b.focusIndex = b.considerAllowBlankLength() - 1
  32.                                 }
  33.                                 c.stopEvent()
  34.                         }
  35.                         break;
  36.                 case FR.keyCode.TAB:
  37.                         b.collapse();
  38.                         break;
  39.                 case FR.keyCode.ENTER:
  40.                         if (b.isExpanded()) {
  41.                                 if (b.focusIndex != undefined) {
  42.                                         b._setSelectedIndex(b.focusIndex)
  43.                                 } else {
  44.                                         b.collapse();
  45.                                         b.editComp.blur();
  46.                                         c.stopEvent();
  47.                                         break
  48.                                 }
  49.                                 b._onEnterPressed();
  50.                                 if (b.editComp.val() == "" && b.options.allowBlank !== false) {
  51.                                         b.inList = true
  52.                                 }
  53.                                 c.stopEvent()
  54.                         }
  55.                         break
  56.                 }
  57.         }
复制代码
          模版我就不上了,免得赚大家的豆子,很简单的几个js大家一用就知道功效。




  
编辑于 2018-1-23 10:38  
编辑于 2018-1-23 10:52  
分享扩散:

沙发
发表于 2018-1-18 11:05:26
最近高产啊
板凳
发表于 2018-1-18 11:53:54
已提名精华帖,待论坛运营委员会评分后可评为精华帖,帆软论坛精华帖奖励计划http://bbs.fanruan.com/thread-91079-1-1.html
地板
发表于 2018-1-21 17:03:00
来自手机
谢谢楼主,大赞,大爱
5楼
发表于 2018-1-22 19:03:54
关于楼主的分享,我有点疑惑。首先楼主主要是分为了两个问题小解决方案。
1、不刷新整个页面,只动态刷新下拉框的值 实现方案。
我看了一下,感觉第二个控件数据字典设置为公式,然后如下面例子:

就能实现正常的B3选择值改变,C3可选值联动变更。没想明白为啥会刷新页面。

2、就是操作习惯[color=rgba(10, 18, 32, 0.64)]enter。但是帆软是tab的问题,这个只要直接设置更改一下填报属性快捷键设置即可实现。

不明白为啥要用js实现。是有什么特殊的地方吗?希望楼主解惑

6楼
发表于 2018-1-23 09:40:09
星痕 发表于 2018-1-22 19:03
关于楼主的分享,我有点疑惑。首先楼主主要是分为了两个问题小解决方案。
1、不刷新整个页面,只动态刷新 ...

1.你这个必须要操作了前面的下拉框后面才会变,这个地方是只有一个地方需要选择,举个例子,别人前面一步操作填了单号到某表。你这一步需要选择某个单号来操作,那么你就只有一个下拉框,我的方法不操作前面的下拉框,本下拉框也可以动态的改变值,跟着最新的值走。至于直接用sql公式,这个没有试过,但是有一点,如果sql教长的话 ,用公式感觉不是很方便啊,公式如果可以的话,也算另一种方法吧,我没验证过。
2.这里可能是我没有表述清楚,这个jS改变的是下拉框选择的快捷键,由tab改成了enter 编辑于 2018-1-23 09:41  
7楼
发表于 2018-1-23 10:46:31
恍1 发表于 2018-1-23 09:40
1.你这个必须要操作了前面的下拉框后面才会变,这个地方是只有一个地方需要选择,举个例子,别人前面一步 ...

搜嘎。这么高大上,我在吸收一下
8楼
发表于 2023-8-18 16:46:03
试过,刷新不了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

8回帖数 1关注人数 15591浏览人数
最后回复于:2023-8-18 16:46

返回顶部 返回列表