我是 Oracle Apex 新手。
我对带有复选框的交互式报告有疑问。 IR 的查询如下:
SELECT APEX_ITEM.checkbox2 (1, deptno, p_attributes => 'class="deptno_cb"') "Select",
deptno,
dname,
loc
FROM dept
WHERE deptno = NVL ( :p16_department_list, deptno);
Oracle apex 页面顶部有一个选择列表。选择列表值后,IR 报告会更新。选择列表动态操作刷新 IR 区域。
“函数和全局变量声明”中的页面 Javascript 有以下代码来限制用户一次选择/选中一个复选框。
$('#object_details_static_id input[type=checkbox][name=f01]').on('change',function(){
$('#object_details_static_id input[type=checkbox][name=f01]').not(this).prop('checked',false);
});
问题是,当我更改选择列表值时,用户可以选择多个复选框
当我刷新浏览器时,页面(复选框)工作正常,并且页面限制用户一次只能选择一个复选框。
我原以为上面的 JavaScript 代码会限制用户始终只能选择一个复选框,但当我更改选择列表值时,这种情况并没有发生。我必须刷新浏览器才能使页面正常工作。
我在这里做错了什么吗?任何帮助将不胜感激。
谢谢
Oracle Apex。
我期待 javascript 代码
$('#object_details_static_id input[type=checkbox][name=f01]').on('change',function(){ $('#object_details_static_id input[type=checkbox][name=f01]').not(this).prop('checked',false); });
会限制用户始终只能选择一个复选框,但当我更改选择列表值时不会发生这种情况。更改选择列表后,我必须刷新浏览器才能使页面按预期工作..
需要委托javascript事件。您看到的是预期的行为,因为事件只能添加到 DOM 中实际存在的元素中。如果动态添加元素,则必须从静态父元素委托事件(此文本复制自此答案)。
“APEX 方式”是尽可能使用动态操作来处理任何事件。以下是如何做到这一点:
.empno_cb
有一个动态操作。 “Event Scope”属性指示即使报表刷新(这是 DOM 更改),事件也将被委托并绑定到元素。通过将其设置为“静态”来测试这一点。请注意,它只会工作一次,并且在刷新报告时不起作用。仅此而已。
这也可以在没有动态动作的情况下完成。 IR 的静态 ID 为“emp-ir”。 js 代码将是:
$(document).on("click", "#emp-ir", function()
{
$('#emp-ir input[type=checkbox][name=f01]').on('change',function(){
$('#emp-ir input[type=checkbox][name=f01]').not(this).prop('checked',false);
});
}
);