为什么我们需要禁用=“禁用”?
似乎普遍认为,对于不需要任何价值的XHTML属性,我们应该重复属性名称。 例如,正确的XHTML中的<input disabled>
是<input disabled="disabled"/>
。
但是,我们可以使用以下任何一种方法来禁用HTML <input>
元素:
<input disabled=" "/>
<input disabled=""/>
<input disabled="asdfg">
<input disabled="false">
实际上是否有官方规定使用disabled="disabled"
? 或者这是一个品味问题?
官方正确的xhtml语法是disabled="disabled"
。
这是因为xhtml是一种XML语法,XML要求属性具有值。 xhtml规范还明确指定该值应该“禁用”。
选择这个值超过任何其他可能值的原因是相当随意的; 他们简单地认为所有以前的布尔属性都应该通过使其值与其名称相同来转换为XML格式。
所以是的,有一个官方说明说你必须使用完整的语法。 但它只适用于xhtml文档。 你可以在这里找到它(如果你在那个页面中搜索disabled
,你会发现它被列为只允许"disabled"
作为值,对于readonly
属性和checked
属性也是如此)。
纯HTML(包括v4和v5)不以此方式与XML的限制绑定,并且不需要用于disabled
的属性值; 无论您是否拥有该属性的值或该值是什么,仅disabled
属性的存在就足以禁用该字段。
所有这些的最终结果是,如果您使用的是XHTML文档类型,或者您希望保持XML兼容,则应该使用disabled="disabled"
。 如果您不使用XHTML,而且您不关心使用有效的XML语法,那么您可以仅使用disabled
,或者使用任何您喜欢的属性值。
我会注意到的另一件事(稍微偏离主题,但可能相关)是,这可能会影响可能引用该字段的任何CSS或JQuery代码。 例如,我见过使用JQuery选择器的人,如$('[disabled=disabled]')
,在CSS中也是类似的。 这显然依赖于具有期望值的属性。 因此,如果你要在选择器中引用一个像这样的布尔属性,你应该引用它没有值,如下所示: $('[disabled]')
因为无论属性设置为什么,它都可以工作。
有这方面的文档,这些属性的官方术语是“布尔属性”
官方标准位于W3C网站http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2
它说:
它们出现在元素的开始标记中意味着该属性的值为“true”。 他们的缺席意味着“虚假”的价值。
为了使您的XHTML标记有效,您必须使用长时间的
<option selected="selected">
对于HTML,您可以使用最小化的表单
<option selected>
@Spudley已经为您提供了XHTML规范的链接,以提供官方文档。
尽管在XHTML中使属性和值都相同的选择并不完全是任意的。
正如@索尼所说的那样,XHTML 1.0是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-microsyntax.html#boolean-attributes。