Javascript 在页面上为项目显示一个值,但发布不同的值
我有一个包含大量项目的页面,使用表格形式生成。这是一个预算分录表。每个预算条目可以是单个年度预算金额,也可以是一组12个月的预算金额 我用一个“金额类型”选择列表实现了这一点,该列表是“年”或“月”,后面是13个项目——一个年度金额,后面是一年中每个月的12个金额Javascript 在页面上为项目显示一个值,但发布不同的值,javascript,html,oracle,oracle-apex,Javascript,Html,Oracle,Oracle Apex,我有一个包含大量项目的页面,使用表格形式生成。这是一个预算分录表。每个预算条目可以是单个年度预算金额,也可以是一组12个月的预算金额 我用一个“金额类型”选择列表实现了这一点,该列表是“年”或“月”,后面是13个项目——一个年度金额,后面是一年中每个月的12个金额 如果金额类型为“年”,或用户将其更改为“年”,则启用“年金额”项目,禁用“月金额” 如果金额类型为月,或用户将其更改为月,则年度金额项目将被禁用(同时仍显示已输入的值) 但是,禁用项后面的值仍然很重要;必须在提交页面时发布;这就是
- 如果金额类型为“年”,或用户将其更改为“年”,则启用“年金额”项目,禁用“月金额”
- 如果金额类型为月,或用户将其更改为月,则年度金额项目将被禁用(同时仍显示已输入的值)
- 如果Amount Type是MONTH,我希望动态显示(禁用的)年度Amount项目内(或顶部)的月份项目总数;而且
- 如果Amount Type为YEAR,我希望动态地获取输入的年度金额,除以12,并在每个(禁用的)月度项目中显示结果
注意:解决方案必须与IE7配合使用,IE7在这里是SOE。使用隐藏字段存储实际值
<input type="hidden">
当实际字段更改时更新隐藏字段
然后,您可以在仅可视字段中显示您想要的任何内容(不要给它们命名,它们不会包含在表单post数据中)使用隐藏字段存储真实值
<input type="hidden">
当实际字段更改时更新隐藏字段
然后,您可以在仅可视字段中显示您想要的任何内容(不要给它们命名,它们不会包含在表单发布数据中)非常感谢NoPyGod,他的评论让我找到了一个可行的解决方案 我在表格中添加了一个额外的字段TOTAL_AMOUNT_DSP,并隐藏了底层数据库字段TOTAL_AMOUNT。我使用javascript设置总金额,并根据金额类型将其设置为可编辑或只读 为了避免“自用户启动更新过程以来,数据库中数据的当前版本已更改”。错误,我已将默认MRU过程替换为自定义更新过程:
FOR i IN 1..APEX_APPLICATION.g_f01.COUNT LOOP
UPDATE budget_entries
SET amount_type = APEX_APPLICATION.g_f02(i)
,total_amount = APEX_APPLICATION.g_f03(i)
,month1 = APEX_APPLICATION.g_f05(i)
,month2 = APEX_APPLICATION.g_f06(i)
,month3 = APEX_APPLICATION.g_f07(i)
,month4 = APEX_APPLICATION.g_f08(i)
,month5 = APEX_APPLICATION.g_f09(i)
,month6 = APEX_APPLICATION.g_f10(i)
,month7 = APEX_APPLICATION.g_f11(i)
,month8 = APEX_APPLICATION.g_f12(i)
,month9 = APEX_APPLICATION.g_f13(i)
,month10 = APEX_APPLICATION.g_f14(i)
,month11 = APEX_APPLICATION.g_f15(i)
,month12 = APEX_APPLICATION.g_f16(i)
WHERE budget_entry_id = APEX_APPLICATION.g_f01(i);
END LOOP;
这种方法唯一的缺点是,如果多个用户同时更新行,我就无法获得内置的Apex保护;基本上是“最后更新获胜”。我通过基于表中的版本列进行简单的丢失更新检测来解决这个问题。非常感谢NoPyGod,他的评论让我找到了一个有效的解决方案 我在表格中添加了一个额外的字段TOTAL_AMOUNT_DSP,并隐藏了底层数据库字段TOTAL_AMOUNT。我使用javascript设置总金额,并根据金额类型将其设置为可编辑或只读 为了避免“自用户启动更新过程以来,数据库中数据的当前版本已更改”。错误,我已将默认MRU过程替换为自定义更新过程:
FOR i IN 1..APEX_APPLICATION.g_f01.COUNT LOOP
UPDATE budget_entries
SET amount_type = APEX_APPLICATION.g_f02(i)
,total_amount = APEX_APPLICATION.g_f03(i)
,month1 = APEX_APPLICATION.g_f05(i)
,month2 = APEX_APPLICATION.g_f06(i)
,month3 = APEX_APPLICATION.g_f07(i)
,month4 = APEX_APPLICATION.g_f08(i)
,month5 = APEX_APPLICATION.g_f09(i)
,month6 = APEX_APPLICATION.g_f10(i)
,month7 = APEX_APPLICATION.g_f11(i)
,month8 = APEX_APPLICATION.g_f12(i)
,month9 = APEX_APPLICATION.g_f13(i)
,month10 = APEX_APPLICATION.g_f14(i)
,month11 = APEX_APPLICATION.g_f15(i)
,month12 = APEX_APPLICATION.g_f16(i)
WHERE budget_entry_id = APEX_APPLICATION.g_f01(i);
END LOOP;
这种方法唯一的缺点是,如果多个用户同时更新行,我就无法获得内置的Apex保护;基本上是“最后更新获胜”。我已经通过基于表上的版本列的简单丢失更新检测解决了这一问题。不确定-我最初的想法略有不同,即生成隐藏项以保存计算值,并在禁用项的顶部动态显示隐藏的计算项。你的想法是使用隐藏字段来存储实际值,以便发布到数据库中。我不确定它是否适用于Apex的表格格式,我发现它很容易弄糟。我会玩一玩看看。现在的主要问题是,当我有了隐藏项时,我会收到可怕的“自用户启动更新过程以来,数据库中数据的当前版本已更改。”提交页面时。删除您添加的所有额外字段,并设置原始字段