Настройка элемента управления для чтения с использованием jquery 1.6.prop()

С выпуском jQuery 1.6 рекомендация по SO должна была начаться с использования prop(), где вы использовали attr().

Что происходит, когда я хочу сделать элемент readonly?

$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);

Ни один из них, похоже, не делает контроль только для чтения. Является ли элемент только для чтения исключением из правила?

Ответ 1

Проблема заключается в том, что имя свойства чувствительно к регистру. Попробуйте:

$('.control').prop('readOnly', true);

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

document.getElementsByClassName("control")[0].readOnly = true;

Ответ 2

Попробуйте следующее:

$(".control").prop({ readOnly: true });

Я думаю об этом так: . attr() получает значение по умолчанию в разметке html, а . prop() получает/устанавливает значение динамически. Посмотрите на следующее:

<input id="someInput" readonly="readOnly" />

$(".control").attr("readOnly") // would yield "readOnly"
$(".control").prop("readOnly") // would yield true
$(".control").is(":readOnly")  // would yield true

Документация api говорит следующее:

Разница между атрибутами и свойства могут быть важны в конкретных ситуациях. Перед jQuery 1.6, метод .attr() иногда учитывал значения свойств, когда получение некоторых атрибутов, которые может привести к непоследовательному поведению. В виде jQuery 1.6, метод .prop() предоставляет способ явного извлечения значения свойств, тогда как .attr() извлекает атрибуты.