【问题标题】:Why do we need disabled="disabled"?为什么我们需要 disabled="disabled"?
【发布时间】:2011-09-25 18:44:32
【问题描述】:

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

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

  • <input disabled=" "/>

  • <input disabled=""/>

  • <input disabled="asdfg">

  • <input disabled="false">

实际上有使用disabled="disabled"的官方规则吗?还是口味问题?

【问题讨论】:

  • 我找不到 any 版本的 XHTML 表明需要使用此功能。所以如果你能找到一个这样说的版本,它基本上回答了这个问题。
  • @NTan - 我提供了一个带有 W3C 标准链接的答案。您可能还需要参考 validator.w3.org 以根据官方标准验证您的标记。
  • ! 不代表我所知道的大多数语言。 disabled="not" 让我很困惑。
  • @Dorus 所以我认为你会更喜欢disabled="yes"disabled="true" 而不是disabled="disabled"

标签: html web xhtml


【解决方案1】:

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

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

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

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

纯 HTML - v4 和 v5 - 不以这种方式与 XML 的限制绑定,并且不需要 disabled 的属性值; disabled 属性的存在就足以禁用该字段,无论您是否有该属性的值,或者该值是什么。

所有这一切的最终结果是,如果您使用的是 XHTML 文档类型,或者您希望保持 XML 兼容,您应该使用disabled="disabled"。如果您不使用 XHTML 并且不关心有效的 XML 语法,那么您可以单独使用 disabled,或者使用您喜欢的任何属性值。

我要注意的另一件事(稍微偏离主题,但可能是相关的)是这可能会对可能引用该字段的任何 CSS 或 JQuery 代码产生影响。例如,我见过有人使用 JQuery 选择器,例如 $('[disabled=disabled]'),以及 CSS 中的类似选择器。这显然依赖于具有期望值的属性。因此,如果您要在选择器中引用这样的布尔属性,则应该在没有值的情况下引用它,如下所示:$('[disabled]'),因为无论属性设置如何,这都会起作用。

【讨论】:

  • xhtml 中的属性应该像这样 disabled="disabled" 被双引号引起来。我知道很多浏览器不介意使用单引号,但如果没有,它就不会以 xml 或 xhtml 的形式传递
  • 这没有回答问题。我知道我们需要一个值来使其符合 XML 语法。但是我在问题中提供的所有示例都是 XML 有效的语法(它们都有一个用引号括起来的属性)。现在的问题是是否有任何规范说该值必须是“禁用”?正如我在问题中所展示的那样,自 20 年前以来,`disabled="hjkl" 在所有浏览器中都能正常工作。
  • @Per Hornshøj-Schierbeck - 根据我对XML spec,特别是AttValue 的阅读,可以使用单引号或双引号将属性值括起来。
  • @N.Tan - 我已经更新了答案以扩展属性的原因,并链接到指定它的 W3C 的 DTD 文档。希望这有助于更好地回答这个问题。
  • @Spudley 甚至不使用[disabled],因此有一个选择器::disabled
【解决方案2】:

有这方面的文档,这类属性的官方术语是“布尔属性”

官方标准在W3C网站http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2

上面写着:

它们在开始标签中的出现 一个元素意味着 该属性为“真”。他们的缺席 表示“假”的值。

为了使您的 XHTML 标记有效,您必须使用长手标记

<option selected="selected">

对于 HTML,可以使用最小化的表单

<option selected>

【讨论】:

  • sry 虽然我已将问题标记为 HTML(因为我认为 xhtml 实际上与 html 相关),但问题明确指出 XHTML 但链接是 HTML 规则。
  • 好吧,伙计们...请阅读一下 XHTML1 的历史!
【解决方案3】:

@Spudley 已经为您提供了 XHTML 规范的链接以提供官方文档。

在 XHTML 中使属性和值都相同的选择并不是完全随意的。

正如@Sohnee 所说,XHT​​ML 1.0 是对 HTML4.01 在 XML 中的重新表述,其目标是尽可能坚持 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

【讨论】:

    【解决方案4】:

    An html4 document 指定:

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

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

    【讨论】:

    • sry 虽然我已将问题标记为 HTML(因为我认为 xhtml 实际上与 html 相关),但问题明确指出 XHTML
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多