我的页面上有 3 个广播组。当用户在第一个单选组中选择一个值时,如果它是特定值,则其他两个单选组中的选择将重置为默认值,并且它们将被禁用以防止更改它们。
问题是内置的 apexDisable
操作使用disable
javascript 属性,因此无线电组的值会从会话中删除。它需要使用等效于 的 javascript readonly
,据我所知,它目前在 apex 中不存在。
如何解决此问题以根据另一个无线电组中的选择启用/禁用无线电组,同时仍然能够从我的代码中访问选定的值?
我的页面上有 3 个广播组。当用户在第一个单选组中选择一个值时,如果它是特定值,则其他两个单选组中的选择将重置为默认值,并且它们将被禁用以防止更改它们。
问题是内置的 apexDisable
操作使用disable
javascript 属性,因此无线电组的值会从会话中删除。它需要使用等效于 的 javascript readonly
,据我所知,它目前在 apex 中不存在。
如何解决此问题以根据另一个无线电组中的选择启用/禁用无线电组,同时仍然能够从我的代码中访问选定的值?
根据规范,部分问题是 readonly 不适用于单选按钮。这是一个适合您的解决方案,但请务必在多个浏览器中进行测试...
将此函数添加到页面的函数和全局变量声明属性中:
function preventRadioSelection(e) {
e.preventDefault();
$(this).blur();
}
将此 CSS 添加到页面的 Inline 属性中:
.sudo-disabled+label {
opacity: .5;
cursor: default;
pointer-events: none;
}
当您需要禁用某个项目时,请使用带有以下代码的 Execute JavaScript 操作:
$(this.affectedElements).find('input').on('click', preventRadioSelection).addClass('sudo-disabled');
然后将受影响的元素设置为要禁用的项目。
当您需要启用项目时,请使用 Execute JavaScript 操作和以下代码:
$(this.affectedElements).find('input').off('click', preventRadioSelection).removeClass('sudo-disabled');
然后将 Affected Elements 设置为您要启用的项目。
请记住,所有这些都是客户端的,并且可以由知道他们在做什么的人来解决。您需要通过服务器端验证来强制执行您的业务规则。