Как отключить элемент страницы, не удаляя его из состояния сеанса - PullRequest
1 голос
/ 22 января 2020

У меня есть 3 радиогруппы на моей странице. Когда пользователь выбирает значение в первой группе радиостанций, если это конкретное значение, выбор в двух других группах радиостанций сбрасывается до значения по умолчанию и отключается, чтобы предотвратить их изменение.

Проблема в том, что встроенное действие apex Disable использует свойство disable javascript, поэтому значение радиогрупп удаляется из сеанса. Для этого потребуется использовать javascript, эквивалентный readonly, которого, насколько я знаю, в настоящее время в apex нет.

Как мне обойти эту проблему, чтобы включить / отключить группы радиосвязи на основе выбора в другой группе радиостанций, при этом все еще имея возможность доступа к выбранному значению из моего кода?

1 Ответ

1 голос
/ 22 января 2020

Часть проблемы заключается в том, что readonly не относится к переключателям, как указано в спецификации c. Вот решение, которое должно работать для вас, но не забудьте протестировать в нескольких браузерах ...

  1. Добавьте эту функцию в атрибут Function и объявление глобальной переменной на странице:

    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');
    

    Затем установите «Затронутые элементы» на элемент (ы), которые вы хотите включить.

Имейте в виду, что все это на стороне клиента, и может быть обойдено кем-то, кто знает, что они делают. Вам нужно будет применить свои бизнес-правила с помощью проверок на стороне сервера.

...