Обновлен:
Вот подход, который должен работать:
$(':input:disabled, .ms-crm-RadioButton[disabled]')
.attr('readonly', 'readonly').removeAttr('disabled');
Обратите внимание на использование псевдоселекторов :input
и :disabled
. :input
будет в основном выбирать все поля формы (не только теги <input/>
), а :disabled
обеспечивает более пуленепробиваемый способ обнаружения отключенных полей (он будет обрабатывать disabled="disabled"
, disabled="true"
или просто disabled
).
Я не уверен, какое поведение вы должны ожидать от элемента .ms-crm-RadioButton
. Это, очевидно, не нативный элемент управления, но предоставленный код по крайней мере изменит атрибуты disabled
и readonly
, как указано.
<Ч />
Редактировать:
Поведение, которое вы видите с помощью селекторов выше, правильное:
$('input:disabled').css("border","3px solid red");
Этот селектор состоит из двух частей: input
и :disabled
. Часть input
говорит, что нужно выбрать ТОЛЬКО теги типа <input/>
. Это, очевидно, исключает теги типа <select/>
или <div/>
. Часть :disabled
просто фильтрует выбор тегов <input/>
до тех, которые также отключены.
$('select:disabled').css("border", "3px solid red");
Этот селектор по сути тот же, что и выше, но работает с тегами <select/>
вместо тегов <input/>
.
$('div').css("border", "3px solid red");
Довольно понятно ...
$('div:disabled').css("border", "3px solid red");
Этот селектор здесь на самом деле не имеет большого смысла. <div/>
теги на самом деле не являются элементами ввода, поэтому семантически не имеет смысла их отключать. В приведенной выше разметке я вижу, что у вас действительно установлен атрибут disabled
для <div/>
, но на самом деле это ничего не «отключает», потому что это недопустимый атрибут для <div/>
.
С учетом вышесказанного атрибут disabled
все еще существует (допустимый или нет) и может использоваться в селекторе. Мы просто не сможем использовать псевдоселектор :disabled
, потому что элемент на самом деле не отключен. Мы можем, однако, написать селектор, который просто ищет необработанное присутствие этого атрибута, например: 'div[disabled]'
.
Итак, учитывая, что нам нужно выбрать теги <input/>
, <select/>
и <div/>
, которые все отключены (или, по крайней мере, имеют отключенный атрибут), мы можем написать селектор следующим образом:
$(':input:disabled, div[disabled]')
* Ранее я описывал псевдоселектор :input
.
Используя этот селектор, мы можем удалить атрибут disabled и установить атрибут readonly для всех совпадающих элементов следующим образом:
$(':input:disabled, div[disabled]')
.attr('readonly', 'readonly').removeAttr('disabled');
Обратите внимание, что приведенное выше утверждение должно вести себя точно так, как описано, но имейте в виду, что атрибуты disabled
и readonly
не имеют внутреннего значения для тегов <div/>
, поэтому я не ожидаю, что вы заметите какие-либо заметные различия в те.