Сделайте так, чтобы отключенные радиокнопки не были серыми (ведут себя только для чтения) - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть запрос от пользователей на изменение Microsoft CRM, чтобы ее поля были доступны только для чтения, но были доступны только для чтения.Изучив DOM, я узнал, что радиоуправление отключено.Для выполнения этого запроса у меня нет возможности изменить, как приложение генерирует HTML.Однако у меня есть возможность запускать функцию javascript для события onload форм.Я пробовал несколько разных подходов, совсем недавно я пытался использовать jQuery, чтобы удалить атрибут disabled и прикрепить обработчики событий к радио, чтобы вернуть их значения обратно, если пользователь пытается их изменить.

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

Чтобы обойти это, я попытался написать собственное свойство для всех элементов управления радио, которые записывают, была ли оно проверено при загрузке страницы, а затем обработчик события, который сбрасывает проверенное свойство на каждой переключателе с настраиваемым атрибутом до его оригинала.значение всякий раз, когда срабатывает событие изменения любого переключателя.Однако этот метод не работает для меня.Я собираюсь включить пример приложения, чтобы показать мой подход.Я был бы признателен за помощь в исправлении моего кода или за помощь в решении этих задач с использованием другого подхода.

Я хотел бы еще раз переформулировать требования для любого решения, которое я придумаю.

  1. Решение необходимо записать только в IE.
  2. У меня нетконтроль над сгенерированным HTML, только возможность писать javascript.
  3. Поля, которые установлены как отключенные, должны отображаться черным, а не серым.
  4. Пользователи не должны иметь возможностьизменить значения этих полей.

    <script src="js/jquery.1.6.4.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            //Set custom attribute for disabled checked radio's
            $('input:radio:disabled:checked').attr('custom:bmiChecked', "true");
            //set custom attribute for disabled unchecked radio's
            $('input:radio:disabled:not(:checked)').attr('custom:bmiChecked', "false");
            //select disabled radio's and then filter to radio's that have the custom attribute set
            $('input:radio:disabled').filter(function () {
                return $(this).attr('custom:bmiChecked');
            }).each(function () {
                //attach a click event handler
                $(this).click(function () {
                    //In the event handler select all radio's that have the bmiChecked attribute
                    $('input:radio').filter(function () {
                        return $(this).attr('custom:bmiChecked');
                    }).each(function () {
                        //For each of these radio's set their checked property to the original value from the page load.
                        if ($(this).attr('custom:bmiChecked') == "true") {
                            $(this).attr('checked', "").css({ 'border': '5px solid green' });
                        }
                        else {
                            $(this).attr('checked', "checked").css({ 'border': '5px solid red' });
                        }
                    });
                });
            });
            //remove all the disabled properties from radiobutton's
            $('input:radio:disabled').prop('disabled', false);
        });
    </script>
    
    
    <input name="rad_new_bitfield2options" tabindex="1090" class="ms-crm-RadioButton" disabled="" id="Radio2" style="margin-left: 0px;" type="radio" value="1" checked="checked" />
    
    <input name="rad_new_bitfield2options" tabindex="1090" class="ms-crm-RadioButton" disabled="" id="Radio3" type="radio" value="2"  />
    

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Не очень красивое решение, как указал @cdeszaq. Но все, что вам нужно сделать, это «перепроверить» первоначально проверенную кнопку. Рабочая скрипка .

2 голосов
/ 16 сентября 2011

Вы можете сделать так, чтобы ваш javascript заменил поля формы другими html-элементами, такими как <p> элементы, которые содержат те же данные.

Это избавляет от необходимости отключать элементы формы имне по крайней мере, имеет гораздо больше смысла.Если пользователи все равно не могут изменить значения, зачем создавать их элементы формы?

Это также намного проще, чем пытаться перехватывать события и делать вещи, чтобы предотвратить нормальное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...