readonly =“true”和&之间的区别是什么?只读=“只读”?

时间:2011-05-30 06:22:03

标签: html

有什么区别:

<input name="TextBox1" type="text" id="TextBox1" readonly="true" />

<input name="TextBox1" type="text" id="TextBox1" readonly="readonly" />

当我将readonly设置为true时,它与readonly='readonly'的工作方式略有不同。 W3C标准称readonly应为'readonly'&amp;不是'true'。为什么大多数浏览器都允许readonly='true'功能与readonly='readonly'不同?

6 个答案:

答案 0 :(得分:60)

为元素赋予属性readonly将使该元素具有只读状态。无论你在它之后放置什么价值,或者如果你在它之后加上任何值,它仍然会将其视为只读。放readonly="false"将不起作用。

建议使用W3C标准,即readonly="readonly"

答案 1 :(得分:55)

这是属性设置而不是值属性

这些属性设置是每次看到的值,不需要对它们进行任何分配。当它们存在时,一个元素将此布尔属性设置为true,当它们不存在时它们是false

<input type="text" readonly />

实际上,浏览器可以自由地为它们赋值。如果为它们分配任何值,它将被忽略。浏览器只会看到特定属性的存在,并忽略您尝试分配给它们的值。

这当然是好的,因为有些框架无法在不提供它们的价值的情况下添加这些属性。 Asp.net MVC Html助手就是其中之一。 jQuery曾经是相同版本,直到版本1.6,他们添加了属性的概念。

当然也有一些与XHTML相关的含义,因为XML中的属性需要值以便形成良好。但这是一个不同的故事。因此浏览器必须忽略值赋值。

反正。 除非名称拼写正确,否则不要介意分配给他们的价值,以便浏览器检测到它。但是为了可读性和可维护性,最好为它们分配有意义的值,如:

readonly="true" <-- arguably best human readable
readonly="readonly"

而不是

readonly="johndoe"
readonly="01/01/2000"

这可能会使未来的开发人员混淆维护您的代码,并可能干扰未来的规范,这些规范可能会为此类属性设置定义更严格的规则。

答案 2 :(得分:29)

readonly="true" 无效HTML5 readonly="readonly"有效。

HTML5规范

http://www.w3.org/TR/html5/forms.html#attr-input-readonly

  

readonly属性是布尔属性

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes

  

元素上存在布尔属性表示真值,缺少属性表示假值。

     

如果该属性存在,则其值必须是空字符串,或者是属性的规范名称的ASCII不区分大小写匹配的值,没有前导空格或尾随空格。

<强>结论

以下是有效,等效和真实

<input type="text" readonly />
<input type="text" readonly="" />
<input type="text" readonly="readonly" />
<input type="text" readonly="ReAdOnLy" />

以下是无效

<input type="text" readonly="0" />
<input type="text" readonly="1" />
<input type="text" readonly="false" />
<input type="text" readonly="true" />

缺少属性是 false 的唯一有效语法:

<input type="text"/>

<强>建议

如果您关心编写有效的XHTML,请使用readonly="readonly",因为<input readonly>无效,而其他替代方案的可读性较差。否则,只需使用<input readonly>,因为它更短。

答案 3 :(得分:19)

readonly="readonly" xhtml 语法。在xhtml中,布尔属性以这种方式编写。在xhtml中,不允许'属性最小化'(<input type="checkbox" checked>),因此这是在xhtml中包含布尔属性的有效方法。有关详细信息,请参阅this page

如果您的document type是xhtml过渡版或严格版,并且您想验证它,请使用readonly="readonly,否则readonly即可。

答案 4 :(得分:2)

我不确定它们在功能上有何不同。我目前的一批OS X浏览器没有显示任何差异。

我认为由于遗留的HTML属性处理,它们在功能上都是一样的。在当天,任何标志(布尔)属性只需要存在,sans值,例如

<input readonly>
<option selected>

当XHTML出现时,此语法无效且需要值。虽然W3使用属性名称作为值指定,但我猜大多数浏览器供应商决定只检查属性是否存在。

答案 5 :(得分:1)

根据HTML标准,使用

<input name="TextBox1" type="text" id="TextBox1" readonly/>

足以使输入元素只读。但是,XHTML标准表示由于attribute minimization,上面列出的用法无效。您可以参考以下链接:

https://www.w3.org/TR/xhtml1/diffs.html#h-4.5

http://www.w3schools.com/tags/att_input_readonly.asp