这是我在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()方法 减少这种不一致。
有没有办法解决这种跨浏览器的不一致问题?
答案 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 value和element 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”