在IE-8和FF-3.5.8中设置readonly属性时jQuery不一致

时间:2010-03-04 18:14:16

标签: jquery internet-explorer firefox readonly

这是我在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

看起来有一个旧的bug,但不确定它是否得到了解决。 http://osdir.com/ml/jquery-dev/2009-05/msg00115.html

参考:http://api.jquery.com/attr/

  

跨浏览器一致性:一些   属性具有不一致的命名   从浏览器到浏览器。此外,   一些属性的值是   报告不一致   浏览器,甚至跨版本的   一个浏览器。 .attr()方法   减少这种不一致。

有没有办法解决这种跨浏览器的不一致问题?

4 个答案:

答案 0 :(得分:2)

获取/设置属性的功能(与设置属性相反)在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 :(得分:1)

如果是我的代码,我可能会将它设置为普通布尔“true”:

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

当你说它不起作用时;究竟发生了什么?

以下是一个示例脚本:http://gutfullofbeer.net/readonly.html

那个使用我上面的方法,它对我来说在Firefox中运行得很好。 Firebug显示了这样的属性,因为感觉就像它。

答案 2 :(得分:0)

这应该是正确的方法:

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

这样,您可以创建有效的XHTML every attribute has to have a valueelement and attribute names have to be lower case。对于大多数布尔属性,这意味着该值与名称相同。

另见here

  

这是一个布尔属性,因此它没有内容。在有效的XHTML中写readonly="readonly"

还有this remark

  

某些HTML用户代理在按照XML 1.0的要求以完整(非最小化)形式出现时,无法解释布尔属性。请注意,此问题不会影响符合HTML 4的用户代理。涉及以下属性:compact,nowrap,ismap,declare,noshade,checked,disabled,readonly,multiple,selected,noresize,defer。

或者您更改了文档类型;)

答案 3 :(得分:0)

这是IE和FF语法之间令人恼火的细微差别之一。 IE使用驼峰情况,但FF没有。

IE语法:readOnly =“readonly”

FF语法:readonly =“readonly”