我有一个应用程序,我在其中创建了基于SQL查询的经典报告
Select summary_id,
APEX_ITEM.HIDDEN(1,summary_id)||
APEX_ITEM.TEXT(2,attribute5) attribute5
from summary;
这里summary_id和属性5是数字数据类型。
我有七(7行)记录,其中第5行和第7行是sub_total和total值。
我想根据前一行中值的变化动态计算sub_total和total。
第5行是第1行,第2行,第3行和第4行,第7行是第1行,第2行,第3行,第4行和第6行的总和
如果需要提供任何其他信息以了解问题,请告诉我。
谢谢。
Oracle apex 4.2版本。
答案 0 :(得分:2)
我假设您知道如何使用浏览器的Inspect element
功能获取attribute5列下文本框的name属性。它类似于" f01"," f02"或者更高,只需检查一下。
另一个假设(基于您给定的数据)是第5行包含第1行到第4行的总数,第7行包含第5行和第6行的总数。
获得名称后,将此功能粘贴到您的页面"功能和全局变量声明"属性:
function setTotals(itemname){
var v_subtotal=0;
var v_total=0;
for(i=0;i<4;i++){
v_subtotal = Number(v_subtotal) + Number(document.getElementsByName(itemname)[i].value);
}
v_total = Number(v_subtotal) + Number(document.getElementsByName(itemname)[5].value);
document.getElementsByName(itemname)[4].value = v_subtotal;
document.getElementsByName(itemname)[6].value = v_total;
}
function setOnChangeEvent(itemname){
for(i=0;i<4;i++){
document.getElementsByName(itemname)[i].setAttribute("onchange","setTotals(\"" + itemname + "\")");
}
$("[name=" + itemname + "]").eq(5).change(function(){
$("[name=" + itemname + "]").eq(6).val(Number($("[name=" + itemname + "]").eq(4).val()) + Number($("[name=" + itemname + "]").eq(5).val()));
});
$("[name=" + itemname + "]").eq(4).attr("disabled","disabled");
$("[name=" + itemname + "]").eq(6).attr("disabled","disabled");
}
然后在&#34;当页面加载时执行&#34;页面的属性,输入以下代码行:
setTotals(itemname );
setOnChangeEvent(itemname );
一个例子是
setTotals("f02");
setOnChangeEvent("f02");
以下是对代码的简要说明:
功能&#34; setTotals&#34;执行以下操作:
它在参数s&#34; f02&#34;中提供的名称下,从第1个到第4个文本框的总和设置小计框的值。 它还从第6个文本框和为小计文本框计算的值的总和设置“总计”框的值。
功能&#34; setOnChangeEvent&#34;执行以下操作:
它将box 1到4的onchange事件设置为setTotals(&#34; f02&#34;),所以如果您要检查上面提到的其中一个框,它现在看起来像这样:
<input onchange="setTotals('f02')" name="f02" size="20" maxlength="2000" value="5" type="text">
它还设置了第6个框的更改事件。(在其更改事件中发生的事情是自我解释,我想,只需查看代码) 此函数的最后一部分禁用第4和第7个文本框。