Установка элемента управления только для чтения с помощью jquery 1.6 .prop()
С выпуском jQuery 1.6 рекомендация по SO была в целом начинать использовать prop() там, где вы использовали attr().
Что происходит, когда я хочу сделать элемент доступным только для чтения?
$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);
Кажется, ни один из них не делает управление доступным только для чтения. Является ли создание элемента только для чтения исключением из правила?
3 ответа
Проблема в том, что имя свойства чувствительно к регистру. Пытаться:
$('.control').prop('readOnly', true);
Хотя на самом деле я не знаю, почему это требует jQuery. Это работает так же хорошо:
document.getElementsByClassName("control")[0].readOnly = true;
Попробуй это:
$(".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() извлекает только атрибуты.