原文地址: https://oracletechblogs.wordpress.com/2026/01/12/optimized-checkbox-selection-handling-in-oracle-apex-using-apex-collections-and-javascript/ # 使用 APEX 集合和 JavaScript 优化 Oracle APEX 中的复选框选择处理 ## 引言 本文档介绍如何有效地使用 Oracle APEX 集合表,通过 JavaScript 和 PL/SQL 将会话级别的动态值存储到复选框元素中。 使用的技术包括: - JavaScript - Oracle APEX - PL/SQL ## 实现步骤 ### 第1步:页面渲染时创建集合 ```sql BEGIN IF APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name=>'COLL_DOC_SEL_CAT')=FALSE THEN APEX_COLLECTION.CREATE_COLLECTION(p_collection_name =>'COLL_DOC_SEL_CAT'); ELSE APEX_COLLECTION.DELETE_COLLECTION(p_collection_name =>'COLL_DOC_SEL_CAT'); APEX_COLLECTION.CREATE_COLLECTION(p_collection_name =>'COLL_DOC_SEL_CAT'); END IF; END; ``` ### 第2步:保存以下 JavaScript 代码并存储在静态应用程序文件中 ```javascript function getsinglecheckvalue(e, p_checked) { $checkBox = e; console.log($checkBox); var ladd = 0; var selRecordsJSON= '', lblank= ''; apex.server.process( p_checked, {}, { success: function (pData) { console.log(pData); singlechktemp = pData; singlechkfrmtdtval = singlechktemp.length === 1 ? [] singlechktemp.split(','); console.log(singlechkfrmtdtval); var ids = singlechkfrmtdtval.indexOf($checkBox.val()); if(singlechkfrmtdtval.length >= 0) { for (var i = 0; i < singlechkfrmtdtval.length; i++) { singlechkfrmtdtval[i] = singlechkfrmtdtval[i].trim(); if ( singlechkfrmtdtval[i] === $checkBox.val()) { singlechkfrmtdtval.splice(i, 1); i--; ladd = ladd + 1; } } } if(ladd === 0) { singlechkfrmtdtval.push($checkBox.val()); } if (singlechkfrmtdtval.length > 1) { $('#FORCE').attr('disabled', 'disabled'); } else { $('#FORCE').removeAttr('disabled'); } if (singlechkfrmtdtval.length === 0 && ladd > 0) { singlechkfrmtdtval.push('R'); } apex.server.process( p_checked, {x01: singlechkfrmtdtval.join(',')}, { success: function (pData1) { console.log(pData1); }, dataType: "text" }); }, dataType: "text" }); }