这是一个错误? 请检查一下
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?