Readonly = “ true”& readonly = “ readonly”之间的区别是什么?

两者的区别是什么:

<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'而不是 'true'。为什么大多数浏览器允许 readonly='true',它有一些不同于 readonly='readonly'的功能?

129480 次浏览

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

由于遗留的 HTML 属性处理,我假设它们在功能上都是相同的。在过去,任何标志(布尔)属性只需要存在,无值,例如

<input readonly>
<option selected>

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

给予元素属性 readonly将使该元素处于只读状态。无论您在它后面放置了什么值,或者如果在它后面放置了任何值,它仍然会将其视为只读的。放入 readonly="false"不起作用。

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

根据 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

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

如果您的 文件类别是 xhtml 过渡或严格的,并且您想验证它,那么使用 readonly="readonly,否则使用 readonly就足够了。

这是一个属性设置,而不是一个值属性

这些 属性设置是每个 see 的值,不需要对它们进行任何赋值。当它们存在时,元素的布尔属性设置为 true,当它们不存在时,它们就是 false

<input type="text" readonly />

实际上,浏览器对它们的价值分配是自由的。如果你给它们赋任何值,它就会被忽略。浏览器将只看到特定属性的存在,而忽略您试图分配给它们的值。

这当然很好,因为有些框架没有能力添加这样的属性,而不提供它们的价值。Asp.net MVC HTML 助手就是其中之一。JQuery 在版本1.6之前一直是相同的,直到版本1.6他们添加了属性的概念。

当然还有一些与 XHTML 相关的含义,因为 XML 中的属性需要值才能格式良好。但那是另一回事了。因此浏览器必须忽略值分配。

不管怎样。只要名称拼写正确,浏览器就会检测到 不要在意你赋予他们的价值。但是对于可读性和可维护性,最好给它们赋有意义的值,比如:

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

而不是

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

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