Установка элемента управления только для чтения с помощью jquery 1.6 .prop () - PullRequest
26 голосов
/ 05 мая 2011

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

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

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

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

Ответы [ 2 ]

46 голосов
/ 05 мая 2011

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

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

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

document.getElementsByClassName("control")[0].readOnly = true;
10 голосов
/ 05 мая 2011

Попробуйте:

$(".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 () возвращает только атрибуты.

...