这是一个错误? 请检查一下

HTML

<div contentEditable="true">testing....</div>

jQuery的

$(document).ready(function(){
   $('[contenteditable]').removeAttr('contenteditable');
});

上面的代码是好的,工作。 你可以在这里感受到它。

现在,试试这个

$('[contentEditable]').removeAttr('contentEditable'); 
// notice the CamelCase of the string contentEditable

在FF 3.6中,它在控制台上出现错误

指定了无效或非法字符串“code:”12
elem [name] = value;

而div仍然是可编辑的。

我怀疑这是jQuery选择器,但不是。 通过进一步检查,它是通过.removeAttr('contentEditable');传递的参数.removeAttr('contentEditable'); 。 它适用于所有小写字母。 所以,我认为它应该是全部小写字母。 我很好奇,所以我尝试添加CLass作为属性,并执行.removeAttr('CLass'); 。 但后来它没有错误地工作。

那么, contentEditable怎么会给我这个错误?


更新

来自Kobi,似乎它实际上接受任何情况,除了contentEditable (我也尝试过)。

骆驼香烟盒


这不是关于小写字母,而是关于确切的外壳 。 除contentEditable之外的任何其他外壳都可以工作,例如: removeAttr('ConTentEditable');
我找不到问题的确切来源,我想这是一个Firefox限制。

看起来,jQuery在删除它之前将该属性设置为空字符串,这是导致错误的原因。 这似乎更好:

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

你可以把它称为一个bug,但是这个框架真的是这样设计的。 removeAttr以及其他attr函数指向jQuery.attr()来设置属性的值。 将属性设置为"" ,它会尝试删除它。 attr()的代码首先使用in运算符特别检查给定的字符串是否是对象的属性名称:

// If applicable, access the attribute via the DOM 0 way
if ( name in elem && notxml && !special ) {

(来自jQuery 1.4,第1452-1453行)

由于您提供的是camelCase属性名称,因此它会使用该名称而不是elem.setAttribute() ,这是问题的具体原因。 对于任何其他情况, name in elem将返回false(因为属性名称区分大小写),这就是为什么它会成功。 jQuery主要是为了解决与setAttribute()跨浏览器问题。

它看起来像Firefox在将该属性设置为空字符串时存在问题,除非您在其他浏览器中遇到同样的问题。 您可以尝试在jQuery站点或MDC上提交错误。


contentEditable seam是一个特殊的属性:http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable

链接地址: http://www.djcxy.com/p/46703.html

上一篇: is this a bug? please check it out

下一篇: Is it possible to data bind to a method in Silverlight?