readonly =“ true”和readonly =“ readonly”有什么区别?


71

之间有什么区别?

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

和:

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

当我设置为时readonlytrue它的工作方式有所不同readonly='readonly'。W3C标准说readonly应该'readonly'不是'true'。为什么大多数浏览器都允许与readonly='true'哪些功能有所不同readonly='readonly'


什么标记DOCTYPE,DTD和什么浏览器模式?
基思

3
对于您的特定问题,更全面的答案是使浏览器与各种松散(有时甚至很糟糕)的编码兼容。找出适用于所有浏览器的最严格的编码是一种优点,因为只有在浏览器开发人员对它们厌倦之前,错误才会起作用:)
Merlyn Morgan-Graham

Answers:


68

给元素赋予属性readonly将赋予该元素只读状态。紧随其后的是什么值,或者紧随其后的是什么,它仍然将其视为只读。推杆readonly="false"不起作用。

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


14
readonly="false"某种意义上讲,推杆将无法正常工作。从某种意义上说,它将“起作用”(具有效果),它将使该元素变为只读(在当前浏览器中,即使根据规范它是无效的)。
ShreevatsaR

只是添加readonly
到此

58

这是属性设置,而不是有价值的属性

这些属性设置是每次看到的值,不需要对其进行任何分配。如果存在,则元素的布尔属性设置为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"

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


11
-1是因为“可以使用的最佳选择”在HTML 4.01和HTML5中均无效。
user247702 2014年

1
@Stijn:该部分改写了...因此,如果您愿意,可以删除downvote。
罗伯特·科里特尼克

38

readonly="true"无效的HTML5readonly="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>它,因为它更短。


2
+1,但请注意,根据spec,同样适用于HTML 4.01 。
2014年

20

readonly="readonly"xhtml语法。在xhtml中,布尔属性以这种方式编写。在xhtml中,<input type="checkbox" checked>不允许使用“属性最小化”(),因此这是在xhtml中包含布尔属性的有效方法。有关更多信息,请参见此页面

如果您的文档类型是xhtml过渡的或严格的,并且您想对其进行验证,则使用readonly="readonly其他方法readonly就足够了。


1
...因此这是在XHTML中包含布尔属性的格式良好的方法。
罗伯特·科里特尼克

@Robert:是的,这个术语。
KooiInc

2

我不确定它们在功能上有何不同。我当前的OS X浏览器批次没有任何区别。

由于传统的HTML属性处理,我认为它们在功能上都是相同的。回想一下,任何标记(布尔)属性仅需存在,但不带值,例如

<input readonly>
<option selected>

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


这与XML是否有效无关,而是结构良好。有效性与属性的正确命名和赋值,它们的嵌套等有关。有效性与schema有关
罗伯特·科里特尼克

@Robert我指的是XML语法。有效的XML属性语法是attribute_name="value"
Phil

@Phil:不,这是一个格式正确的属性。有效属性是aint_attribute="1"bool_attribute="false"...。它们当然也格式正确。
罗伯特·科里特尼克

@Robert我不是在谈论验证文件。也许我应该使用“合法”一词代替“有效”一词,或者使用其他任何定义了可接受或正确使用字符(即语法)的词
菲尔,

@菲尔 格式正确的XML文档是通过XML格式验证的文档(即,单个根元素,结束元素标签属性均分配有值(任何值))。但是有效的XML文档是针对某种模式有效的文档(例如,某些属性必须为其分配了正确的值类型,或者某些元素只能嵌套在特定的元素中,等等)。属性(因此为它们分配了一些值)。
罗伯特·科里特尼克

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.