似乎普遍的共识是,对于不需要任何值的XHTML属性,我们应该重复属性名称。例如。正确的XHTML <input disabled>
为<input disabled="disabled"/>
。
但是,我们可以使用以下任何来禁用HTML <input>
元素:
<input disabled=" "/>
<input disabled=""/>
<input disabled="asdfg">
<input disabled="false">
实际上是否有使用disabled="disabled"
的官方规则?或者这是品味问题?
答案 0 :(得分:42)
官方正确的 xhtml 语法为disabled="disabled"
。
原因是xhtml是XML语法,XML要求属性具有值。 xhtml规范还明确指定该值应为“禁用”。
选择此值超过任何其他可能值的原因是相当随意的;他们只是决定将所有以前的布尔属性转换为XML格式,方法是使它们的值与它们的名称相同。
是的,有一个官方规范说你必须使用完整的语法。但它只适用于xhtml文档。您可以找到它here(如果您在该页面中搜索disabled
,您会发现它仅列为允许"disabled"
作为值。同样适用于readonly
和checked
属性)。
纯HTML - v4和v5 - 都不以这种方式与XML的限制相关联,并且不需要disabled
的属性值;仅仅存在disabled
属性就足以禁用该字段,无论您是否具有该属性的值,或该值是什么。
所有这一切的最后结果是,如果您使用的是XHTML doctype,或者您希望保持XML兼容,则应使用disabled="disabled"
。如果您不使用XHTML并且不关心有效的XML语法,那么您可以单独使用disabled
,也可以使用您喜欢的任何属性值。
我要注意的另一件事(稍微偏离主题,但可能相关)是这可能会对可能引用该字段的任何CSS或JQuery代码产生影响。例如,我见过人们使用JQuery选择器,如$('[disabled=disabled]')
,以及类似的CSS。这显然依赖于具有期望值的属性。因此,如果您要在选择器中引用这样的布尔属性,则应该在没有值的情况下引用它,如下所示:$('[disabled]')
因为无论属性设置如何都可以。
答案 1 :(得分:6)
有这方面的文档,这类属性的官方术语是“布尔属性”
官方标准位于W3C网站http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2
它说:
他们出现在开始标记中 一个元素意味着的价值 属性为“true”。他们缺席 暗示值为“假”。
要使您的XHTML加价有效,您必须使用长手
<option selected="selected">
对于HTML,您可以使用最小化的表单
<option selected>
答案 2 :(得分:4)
@Spudley已经向您提供了XHTML规范的链接,以提供官方文档。
在XHTML中选择使属性和值相同并不完全是任意的。
正如@Sohnee所说,XHTML 1.0是HTML4中HTML4.01的重新制定,其目标是尽可能地坚持HTML 4模式,以使网络作者尽可能轻松地进行过渡。
HTML始终支持disabled="disabled"
作为布尔属性的有效形式,其原因是允许在SGML中定义缩短的属性disabled
。 (注意@Thaddee Tyl的“有点奇怪”评论)
在SGML中,disabled
上自己的属性不是没有值的属性名称,它是没有名称的属性值。即从名称推断名称。为了使所有这些在SGML中工作并向后兼容浏览器一直以来所做的事情,必须将名称和值定义为相同。
请注意,这仅影响基于SGML的验证。浏览器的解析器逻辑不是基于SGML的,并且从不关心这种微妙之处,因此您可以在实践中为您喜欢的属性添加任何值。
HTML5验证也不是基于SGML的,因此放宽了限制。 disabled=""
现已生效。 disabled="true"
和disabled="false"
无效,因为disabled="false"
令人困惑,因为您注意到它会禁用,而不会启用控件。有关详细信息,请参阅http://www.w3.org/TR/html5/common-microsyntaxes.html#boolean-attributes。
答案 3 :(得分:1)