实现对Oracle Apex中Shuttle值的依赖

时间:2016-08-22 16:01:20

标签: javascript jquery ajax oracle-apex

晚上好!

我正在Oracle Apex中创建一个页面,这会导致创建一个文档。此页面包含许多字段,例如"文本字段"或者"选择列表"等等有自己的逻辑,我已经遇到了两个问题 - 穿梭场(让它命名为A)和文本字段(让它命名为B),这应该取决于第一个。他们互动的方案是这样的:

  • Shuttle A具有值" A"," B"," C"," D"和"其他";
  • 如果选择价值"其他"其中一个也应该填写文本字段B.换句话说,在这种情况下,应该要求字段B.

我遇到的问题是我无法根据字段A值使字段B表现出来。我已经尝试过使用JavaScript函数触发" onChange"如果班车B的右半部分已经到达,那么应该一直在工作的事件"其他人"值。但是这种方式并没有像我想的那样工作,因为" onChange"在梭子的两半上每次点击都会出现这种情况,我只需要在移动价值的同时让它成为现实,而其他人则是#34; (可以通过两种方式完成:双击或由于点击航天飞机上的箭头图标)。

所以问题是:如何在" master-detail"中同步穿梭和文本字段。逻辑?

P.S。我使用的是Oracle Apex 4.2.6.0003。另外我知道我可以有一个解决方法,只使用选择列表,但我想尝试使用穿梭机解决问题,特别是考虑到最后一个可能有几乎无限的值。

1 个答案:

答案 0 :(得分:1)

将静态值作为shuttle的值列表:

STATIC:A;A,B;B,C;C,Others;OTHERS

使用像这样的jvascript代码:

$("#P40_SHUTTLE").change(function(){
console.log(apex.item(this).getValue().indexOf("OTHERS") != -1);
})

选择OTHERS后它将返回true(它在梭子的值中)。改变是在这里倾听的正确事件!

将其翻译为DA:

改变航天飞机 使用"当"类型的条件" JavaScript表达式"并使用此代码:

apex.item(this.triggeringElement).getValue().indexOf("OTHERS") != -1 

然后,您可以使用DA的True和False操作来显示和隐藏文本字段。我不会比前端更进一步。也许显示文本字段所需的标签,因为它只会在显示字段时显示。 在文本字段中添加服务器端验证(在提交时),您将检查穿梭值是否存在OTHERS值。如果它存在,则应该需要文本字段。

在文本字段上创建验证。 类型的条件" PLSQL函数体"

DECLARE
  l_vc_arr2    APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
  l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(:P40_SHUTTLE);
  FOR z IN 1..l_vc_arr2.count LOOP
    IF l_vc_arr2(z) = 'OTHERS' THEN
      RETURN TRUE;
    END IF;
  END LOOP;

  RETURN FALSE;
END;

验证类型:IS NOT NULL
项目:文本字段。

验证只会在所选值中存在其他值时触发,然后才需要文本字段。