随着jQuery 1.6的发布,关于SO的建议一般是开始使用prop(),你过去常常使用attr()。
当我想要只读元素时会发生什么?
$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);
这些似乎都没有使控件只读。将元素readonly作为规则的例外吗?
答案 0 :(得分:46)
问题是属性名称区分大小写。尝试:
$('.control').prop('readOnly', true);
虽然我真的不知道为什么这需要jQuery。这也适用:
document.getElementsByClassName("control")[0].readOnly = true;
答案 1 :(得分:10)
试试这个:
$(".control").prop({ readOnly: true });
我这样想:.attr()获取html标记中的默认值,而.prop()动态获取/设置值。请看以下内容:
<input id="someInput" readonly="readOnly" />
$(".control").attr("readOnly") // would yield "readOnly"
$(".control").prop("readOnly") // would yield true
$(".control").is(":readOnly") // would yield true
api文档说明了这一点:
属性和属性之间的区别 属性可能很重要 具体情况。在jQuery之前 1.6,.attr()方法有时会考虑属性值 检索一些属性,哪些 可能导致不一致的行为。如 jQuery 1.6,.prop()方法 提供了一种显式检索的方法 属性值,而仅限.attr() 检索属性。