使用jquery 1.6 .prop()将控件设置为只读

ajb*_*ven 27 jquery readonly jquery-1.6

随着jQuery 1.6的发布,关于SO的建议一般是开始使用prop(),你曾经使用attr().

当我想要一个元素只读时会发生什么?

$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);
Run Code Online (Sandbox Code Playgroud)

这些似乎都没有使控制只读.将元素readonly作为规则的例外吗?

aro*_*oth 48

问题是属性名称区分大小写.尝试:

$('.control').prop('readOnly', true);
Run Code Online (Sandbox Code Playgroud)

虽然我真的不知道为什么这需要jQuery.这也适用:

document.getElementsByClassName("control")[0].readOnly = true;
Run Code Online (Sandbox Code Playgroud)

  • 或者为了IE的缘故. (3认同)
  • 这取决于您如何衡量可读性.对于没有JavaScript和jQuery经验的人来说,`$()`和`prop()`的语义并不明显.另一方面,`getElementsByClassName()`几乎可以告诉你它到底做了什么.有一些东西可以说是支持自我记录代码. (3认同)
  • 也许是一致的缘故? (2认同)
  • 仅就可读性而言,我不会使用您给出的第二个示例。这可能太明显了,不值得一提,但你在推广它时似乎没有考虑到这一点 (2认同)
  • 您看到第二条语句多长时间了吗?25个字符。我们没有时间。 (2认同)

Cod*_*ick 10

试试这个:

$(".control").prop({ readOnly: true });
Run Code Online (Sandbox Code Playgroud)

我想是这样的:.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
Run Code Online (Sandbox Code Playgroud)

api文档说明了这一点:

在特定情况下,属性和属性之间的差异可能很重要.在jQuery 1.6之前,.attr()方法有时在检索某些属性时会考虑属性值,这可能会导致行为不一致.从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()只检索属性.