testing....
$(document).ready(function(){
$('[contenteditable]').removeAttr('contenteditable');
});
выше кодов прекрасен и работает. можно чувствовать это здесь.
Теперь, попробуйте это
$('[contentEditable]').removeAttr('contentEditable');
// notice the CamelCase of the string contentEditable
в FF 3.6 это дает ошибку на консоли
Недопустимая или недопустимая строка была указана" код: "12
элемент [имя] = значение;
и отделение все еще доступно для редактирования.
Я подозревал, что это было селектором jQuery, но не. Дальнейшим контролем это был аргумент, переданный .removeAttr('contentEditable');
. Это работает когда все строчные буквы. Так, я думал, что это должны быть все строчные буквы. Мне любопытно, таким образом, я пытался добавить CLass
как атрибут и делают .removeAttr('CLass');
. Но затем это работает без ошибки.
Так, каким образом contentEditable
дает мне ту ошибку?
от Kobi кажется, что это на самом деле принимает любой случай кроме, contentEditable
(Я действительно пробовал также).
Речь идет не о маленьких буквах, а о точном корпусе. Любая другая оболочка, кроме contentEditable
, работает, например: removeAttr('ConTentEditable');
.
Я не могу найти точный источник проблемы, полагаю, что это ограничение Firefox.
Похоже, jQuery устанавливает атрибут в пустую строку перед удалением, что и вызывает ошибку. Кажется, это работает лучше:
$('[contentEditable]').attr('contentEditable', false);
Вы могли бы назвать это ошибкой, но на самом деле фреймворк спроектирован таким образом. removeAttr
, наряду с другими функциями attr , указывает на jQuery.attr ()
для установки значения атрибута. После установки для атрибута значения ""
он пытается удалить его. Код для attr ()
специально проверяет, является ли данная строка именем свойства объекта, сначала с помощью оператора в
:
// If applicable, access the attribute via the DOM 0 way
if ( name in elem && notxml && !special ) {
(из jQuery 1.4, строка 1452- 1453)
Поскольку вы указываете имя свойства camelCase, оно использует его вместо elem.setAttribute ()
, что и является причиной проблемы. В любом другом случае имя в элементе
вернет false (потому что имена свойств чувствительны к регистру), поэтому тогда он будет успешным. jQuery делает это в основном для решения проблем кроссбраузерности с setAttribute ()
.
Похоже, у Firefox есть проблема с установкой свойства в пустую строку, если у вас нет такой же проблемы в других браузерах. Вы можете попробовать сообщить об ошибке на сайте jQuery или в MDC.
Свойство contentEditable
(не атрибут, поскольку это не то, с чем обычно имеют дело attr ()
и его друзья) ожидает строку значение, одно из «истина», «ложь» и «наследование». Я бы не стал использовать jQuery для отключения contentEditable
, но я полагаю, что следующее будет работать:
$('[contenteditable]').attr("contentEditable", "false");
Или вы можете обойти jQuery для установки фактического свойства contentEditable
:
$('[contenteditable]').each(function() {
this.contentEditable = "false";
});
contentEditable, похоже, является специальным атрибутом: http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable