действительно ли это - ошибка? проверьте его

HTML
testing....

jQuery

$(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 (Я действительно пробовал также).

CamelCase

7
задан Reigel 7 July 2010 в 08:40
поделиться

4 ответа

Речь идет не о маленьких буквах, а о точном корпусе. Любая другая оболочка, кроме contentEditable, работает, например: removeAttr('ConTentEditable');.
Я не могу найти точный источник проблемы, полагаю, что это ограничение Firefox.

Похоже, jQuery устанавливает атрибут в пустую строку перед удалением, что и вызывает ошибку. Кажется, это работает лучше:

$('[contentEditable]').attr('contentEditable', false);
2
ответ дан 7 December 2019 в 14:28
поделиться

Вы могли бы назвать это ошибкой, но на самом деле фреймворк спроектирован таким образом. 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.

2
ответ дан 7 December 2019 в 14:28
поделиться

Свойство contentEditable (не атрибут, поскольку это не то, с чем обычно имеют дело attr () и его друзья) ожидает строку значение, одно из «истина», «ложь» и «наследование». Я бы не стал использовать jQuery для отключения contentEditable , но я полагаю, что следующее будет работать:

$('[contenteditable]').attr("contentEditable", "false");

Или вы можете обойти jQuery для установки фактического свойства contentEditable :

$('[contenteditable]').each(function() {
    this.contentEditable = "false";
});
0
ответ дан 7 December 2019 в 14:28
поделиться

contentEditable, похоже, является специальным атрибутом: http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable

0
ответ дан 7 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: