1

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

  4. 当您需要启用项目时,请使用 Execute JavaScript 操作和以下代码:

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

    然后将 Affected Elements 设置为您要启用的项目。

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

于 2020-01-22T19:12:27.963 回答