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

      $(".control").attr("readonly", true)

это сработало для меня

Другие вопросы по тегам