gpt4 book ai didi

jquery - 发生错误后保持复选框状态

转载 作者:行者123 更新时间:2023-12-01 08:20:49 25 4
gpt4 key购买 nike

我正在使用 Oracle ApEx,并且有一个带有以下 apex_item.checkbox 调用的标准 SQL 报告,即:

select 
apex_item.checkbox(1, empno) cbox,
"EMPNO",
"ENAME",
"JOB",
"MGR",
"HIREDATE",
"SAL",
"COMM",
"DEPTNO"
from "EMP"
where
(
instr(upper("ENAME"),upper(nvl(:P1_REPORT_SEARCH,"ENAME"))) > 0 or
instr(upper("JOB"),upper(nvl(:P1_REPORT_SEARCH,"JOB"))) > 0
)

我的问题是,除了在我的一个页面中包含此报告外,页面上还有其他项目是必填字段,因此当用户根据上述 SQL 单击 10 个复选框中的 3 个并提交页面上,用户会看到一个错误,表明该页面上的某个项目是必需的。

现在,当用户遇到此错误时,之前选中的 10 个复选框中有 3 个现在未选中。

我可以根据上述场景维护复选框持久性/状态吗?因为我不希望用户重新检查他们已经检查过的记录。

如果可能的话,我有兴趣使用 Oracle ApEx 方法解决此问题。然而,jQuery 方法也可能有效。

最佳答案

我找到了一些方法来做到这一点,结合了 apex 和 jquery:

  • 提交过程中:获取复选框的状态(通过 apex_application )并通过 apex_collections 存储它们

  • 刷新后:通过 ajax 回调获取值,并使用一些 JavaScript 代码再次设置它们。

我根据 emp 和您的查询制作了一份报告(报告 1)(但省略了 where 子句)。 Page overview

在我的提交过程中,我获得了选中的框(通过 apex_application 您只能获得选中的框!),并将它们保存在集合中。每次提交时都会创建或清空该集合。我离开了调试消息,以便您可以跟踪它们。哦,存储的值是 empno,因为您将复选框项基于该列,而不是 1 或 0。

apex_debug_message.log_message('on submit point');
APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION('COLL_REPORT1');

FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
apex_debug_message.log_message('loop chk: '||i||': '||TO_NUMBER(APEX_APPLICATION.G_F01(i)));
APEX_COLLECTION.ADD_MEMBER(p_collection_name => 'COLL_REPORT1',
p_n001 => TO_NUMBER(APEX_APPLICATION.G_F01(i))
);
END LOOP;

然后创建ajax回调流程:我在这里创建了一个 json 数组,它只保存复选框的值,并帮助我轻松解析这些值。检索后集合将被截断。

DECLARE
v_first BOOLEAN := TRUE;
v_json VARCHAR2(4000);
BEGIN
v_json := '[';
FOR r IN (SELECT n001 FROM APEX_collections
WHERE collection_name = 'COLL_REPORT1')
LOOP
apex_debug_message.log_message('stored value: '||r.n001);
IF NOT v_first THEN
v_json := v_json ||',';
ELSE
v_first := FALSE;
END IF;
v_json := v_json || r.n001;
END LOOP;

v_json := v_json || ']';

APEX_COLLECTION.TRUNCATE_COLLECTION('COLL_REPORT1');

htp.p(v_json);
END;

然后需要检索和设置值,这是通过动态操作完成的。

Dynamic action details

  • 事件:刷新后
  • 选择类型:区域
  • 区域:(您的报告区域,我的是报告1)
  • 无条件

代码:

   var oDBGet = new htmldb_Get(null, &APP_ID., 'APPLICATION_PROCESS=get_checked_boxes', &APP_PAGE_ID.);
var arrBoxes = jQuery.parseJSON(oDBGet.get());

$.each(arrBoxes,
function( intIndex, objValue ){
$("input[name='f01'][value='"+objValue+"']").attr("checked","checked");
});

此代码只是调用 ajax 回调并将返回的字符串解析为 json 对象(由于 [value,value,value] 语法,它是一个数组)。然后,我循环遍历该数组,并在名为 f01 的输入元素上设置值(动态创建的复选框,这是基于给定 apex_item.checkbox 的 id),并且该值等于我们存储的值。通过attr该框被选中!

希望我没有做得太过分:)

关于jquery - 发生错误后保持复选框状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com