使用APEX集合和JavaScript优化Oracle APEX中的复选框选择处理
APEX集合JavaScriptOracle APEXPL/SQL会话存储复选框处理
原文地址: 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"
});
}