Настройка элемента управления для чтения с использованием 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() извлекает атрибуты.