在Oracle Apex 4.2中通过Jquery传递选择列表的值

时间:2014-05-16 13:52:16

标签: javascript jquery sql oracle oracle-apex

以下经典报告当我们选择特定行时会弹出一个名为 addExtraDetails 的新模态区域,其中一些数据从行中获取,并且用户需要一些新的附加信息: enter image description here

单击(+)时,将弹出新的模态区域,并从报告行中获取填充值。所以:在列链接中,我把:

javascript:function_to_add_to_basket('E',#ID#, 'Extra#ROWNUM#', #PRICE#,'DUMMY');

然后外部js函数负责传递信息。问题是它不会每次刷新(+)而不是刷新,而是保留第一个输入的值。

点击(+)列链接后,我找到了更好的解决方案(更干净):

javascript:$s('P4_SET_QUANTITY','#QUANTITY#');
javascript:$s('P4_SET_TYPE','E');
javascript:$s('P4_SET_OBJECT_ID','#ID#'); 
javascript:$s('P4_SET_ELEMENT_ID','Extra#ROWNUM#'); 
javascript:$s('P4_SET_COST','#PRICE#'); 
javascript:$s('P4_SET_DISCOUNT','DUMMY');
javascript:openModal('addExtraDetails');

现在每当我们选择各种行时它会更新,因为我们有下拉列表javascript抓取Quantity列的所有可能值,所以对于这段代码:

javascript:$s('P4_SET_QUANTITY','#QUANTITY#'); 

输出结果为:' 012345678910'。

如何将所有值传递给模态区域并使其在每次调用时都使用新值?

1 个答案:

答案 0 :(得分:1)

单击模式按钮时,需要检索选择列表的值。与其他值不同,该值不是静态的。在呈现页面时,替换字符串将替换为它们的值 如果你想要做的就是在javascript函数中使用它们,那么就没有必要做所有这些项目集。你的第一个想法可能同样好,但我会用openModal运行。

首先,确定如何定位选择列表。您没有指定报表是向导生成的表格形式还是手动表格形式(即使用apex_item来生成选择列表)。您可以通过name属性定位选择列表,该属性引用数组,或者按列的标题选择。另请参阅this article。 例如,如果选择列表的列名为QUANTITY,则选择列表为:

td[headers=QUANTITY] select:visible

或者,如果确定阵列,则可以更精确地定位元素。例如,如果NAME属性设置为f02,那么您可以选择

选择列表
input[name=f02]

然后修改openModal函数以选择与pThis相同的行上的列表值 - 这将是触发元素,锚点:

function openModal(pThis, pMethod){
  //fetch the value of the select list on the same row
  //I use the second method of selecting here
  var lListValue = $(pThis).closest('tr').find('input[name=f02]').val();
  ...
}

您还需要调整对openModal的调用:

javascript:openModal(this, 'addExtraDetails');