Несогласованность jQuery в установке атрибута readonly в IE-8 и FF-3.5.8 - PullRequest
2 голосов
/ 04 марта 2010

Это мой код в document.ready:

var $inputs = mySelectors();
$inputs.each(function() {
$(this).attr("readonly", "true");

});

Этот код работает для IE8, но не для FF3.5

Вывод IE (как видно на панели инструментов IE Developer) <input type="text" readOnly="readonly"..../>

FF выход (видно с Firebug) <input type="text" readonly="">

Как правильно его установить?

$elem.attr("readonly","true");

или

$elem.attr("readonly","readonly");

или

$elem.attr("readOnly","readonly"); //note the uppercase O in Only

Похоже, что была старая ошибка, но не уверен, что ее удалось устранить. http://osdir.com/ml/jquery-dev/2009-05/msg00115.html

справка: http://api.jquery.com/attr/

Кроссбраузерная согласованность: некоторые атрибуты имеют противоречивые имена из браузера в браузер. Более того, значения некоторых атрибутов сообщается непоследовательно браузеры, и даже в разных версиях один браузер. Метод .attr () уменьшает такие несоответствия.

Есть ли способ справиться с этой кросс-браузерной несогласованностью?

Ответы [ 4 ]

2 голосов
/ 03 октября 2011

Функциональность для получения / установки свойств (в отличие от установки атрибутов) была фундаментально изменена в jQuery 1.6. Начиная с jQuery 1.6.1 все еще возможно получить / установить эти логические свойства, используя .attr('readonly'), однако предпочтительное использование -

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

Этому изменению способствовала неоднозначность атрибутов (которые отражают начальное состояние элемента) и свойств (которые представляют текущее состояние узла DOM).

Для получения дополнительной информации: http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

1 голос
/ 04 марта 2010

Если бы это был мой код, я бы, вероятно, установил для него простое логическое значение "true":

$elem.attr('readOnly', true);

Когда вы говорите, что это не работает; что именно происходит?

Вот пример сценария: http://gutfullofbeer.net/readonly.html

Тот использует мой метод выше, и он прекрасно работает в Firefox для меня. Firebug показывает атрибут так, потому что это похоже на это.

0 голосов
/ 16 января 2014

Это одно из тех раздражающих минутных различий между синтаксисом IE и FF.IE использует верблюжий случай, когда FF нет.

Синтаксис IE: readOnly = "readonly"

Синтаксис FF: readonly = "readonly"

0 голосов
/ 04 марта 2010

Это должен быть правильный путь:

$elem.attr("readonly","readonly");

Таким образом, вы создаете действительный XHTML как , каждый атрибут должен иметь значение и , а имена атрибутов должны быть в нижнем регистре . Для большинства логических атрибутов это означает, что значение совпадает с именем.

См. Также здесь :

Это логический атрибут, поэтому он не имеет содержимого. В действительном XHTML напишите readonly="readonly"

А также это замечание :

Некоторые пользовательские агенты HTML не могут интерпретировать логические атрибуты, когда они отображаются в их полной (не минимизированной) форме, как того требует XML 1.0. Обратите внимание, что эта проблема не затрагивает пользовательских агентов, совместимых с HTML 4. Используются следующие атрибуты: компактный, nowrap, ismap, объявить, noshade, отмеченный, отключенный, только для чтения, множественный, выбранный, noresize, defer.

Или вы меняете тип документа;)

...