如何禁用页面项而不将其从会话状态中删除

时间:2020-01-22 16:26:12

标签: oracle-apex oracle-apex-19.1

我的页面上有3个广播组。当用户在第一个无线电组中选择一个值时,如果它是特定值,则其他两个无线电组中的选择将重置为默认值,并且将禁用它们以防止更改它们。

问题是内置顶点Disable操作使用disable javascript属性,因此从会话中删除了无线电组的值。它需要使用与readonly等效的javascript,据我所知,它目前不存在于顶点中。

如何解决此问题,以基于另一个无线电组中的选择来启用/禁用无线电组,同时仍然能够从代码中访问选定的值?

1 个答案:

答案 0 :(得分:1)

部分问题是,按照规范,只读不适用于单选按钮。这是一个适合您的解决方案,但请确保在多个浏览器中进行测试...

  1. 将此函数添加到页面的“函数和全局变量声明”属性中:

    function preventRadioSelection(e) {
      e.preventDefault();
      $(this).blur();
    }
    
  2. 将此CSS添加到页面的Inline属性中

    .sudo-disabled+label {
      opacity: .5;
      cursor: default;
      pointer-events: none;
    }
    
  3. 当您需要禁用某个项目时,请使用“执行JavaScript”操作和以下代码:

    $(this.affectedElements).find('input').on('click', preventRadioSelection).addClass('sudo-disabled');
    

    然后将“受影响的元素”设置为要禁用的项目。

  4. 当您需要启用一项时,请使用“执行JavaScript”操作和以下代码:

    $(this.affectedElements).find('input').off('click', preventRadioSelection).removeClass('sudo-disabled');
    

    然后将“受影响的元素”设置为要启用的项目。

请记住,所有这些都是在客户端进行的,可以由知道他们在做什么的人来解决。您需要通过服务器端验证来实施业务规则。