为什么我们需要禁用=“禁用”?

时间:2011-06-30 08:03:14

标签: html web xhtml

似乎普遍的共识是,对于不需要任何值的XHTML属性,我们应该重复属性名称。例如。正确的XHTML <input disabled><input disabled="disabled"/>

但是,我们可以使用以下任何来禁用HTML <input>元素:

  • <input disabled=" "/>

  • <input disabled=""/>

  • <input disabled="asdfg">

  • <input disabled="false">

实际上是否有使用disabled="disabled"的官方规则?或者这是品味问题?

4 个答案:

答案 0 :(得分:42)

官方正确的 xhtml 语法为disabled="disabled"

原因是xhtml是XML语法,XML要求属性具有值。 xhtml规范还明确指定该值应为“禁用”。

选择此值超过任何其他可能值的原因是相当随意的;他们只是决定将所有以前的布尔属性转换为XML格式,方法是使它们的值与它们的名称相同。

是的,有一个官方规范说你必须使用完整的语法。但它只适用于xhtml文档。您可以找到它here(如果您在该页面中搜索disabled,您会发现它仅列为允许"disabled"作为值。同样适用于readonlychecked属性)。

纯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所说,XHT​​ML 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)

An html4 document指定了这个:

  

布尔属性可以合法地采用单个值:属性本身的名称。

布尔属性在sgml世界中总是有点奇怪,所以你真的可以放任何你想要的东西。浏览器的实现非常重要。