【问题标题】:In HTML, what should happen to a selected, disabled option element?在 HTML 中,选择的、禁用的选项元素会发生什么?
【发布时间】:2016-12-04 01:49:27
【问题描述】:

在我的具体示例中,我正在处理一个下拉列表,例如:

<select name="foo" id="bar">
  <option disabled="disabled" selected="selected">Select an item:</option>
  <option>an item</option>
  <option>another item</option>
</select>

当然,这很荒谬,但我想知道是否定义了任何严格的行为。 Opera 有效地拒绝了 'selected' 属性并选择列表中的下一项。所有其他浏览器似乎都允许它,并且它保持选中状态。

更新:为了澄清,我对最初的选择特别感兴趣。我正在处理其中一个“选择一个项目:”类型的下拉菜单,在这种情况下,第一个选项实际上是一个标签,并且发生了一个动作onchange()。这是相当很好地“逐步增强”,因为存在提交按钮,并且只能通过 JavaScript 删除。如果删除了“选择...”选项,那么将成为第一项的任何内容都将无法选择。我们只是完全排除了onchange 下拉菜单,还是应该选择“选择...”选项,只是没有效果?

【问题讨论】:

    标签: html forms cross-browser specifications


    【解决方案1】:

    关于这种奇怪的组合,HTML 规范有点模糊(即完全缺乏)。他们确实说带有 disabled 属性集的表单元素不应该成功,所以它真的不能被选中。

    浏览器可能会很好地呈现它,使其看起来被选中,但它不应该出现在 POSTed 数据中。看来 Opera 对我来说是正确的。

    【讨论】:

      【解决方案2】:

      The HTML specs 声明 selected 和 disabled 都是 &lt;option&gt; 元素的可用选项,但没有指定在发生冲突时应该发生什么。在section on disabled controls 它说

      设置后,禁用属性具有 对元素的以下影响:

      • 禁用的控件不会获得焦点。
      • 在标签导航中跳过禁用的控件。
      • 禁用的控件无法成功。

      它也说

      禁用元素的呈现方式取决于用户代理。例如,一些用户代理“灰显”禁用菜单项、按钮标签等。在此示例中,INPUT 元素被禁用。因此,它无法接收用户输入,也不会将其值与表单一起提交。

      虽然未指定此特定情况,但我对此的阅读表明“选定”“禁用”元素的实际呈现由浏览器决定。只要用户无法选择它,它就会按标准工作。它确实说脚本可以作用于元素,因此 Javascript 可以将禁用的选项设置为选中(或禁用选定的选项)。这并不违反标准,但是在提交表单时,该选项的值不能是选定的值。在这种情况下,选择列表(我假设)必须有一个空值。

      【讨论】:

        【解决方案3】:

        在回复问题中的更新时,我会说“标签”选项应该是可选的,但要么让它在提交时或通过 JavaScript 不执行任何操作,不允许在未选择值的情况下提交表单(假设它是必填字段)。

        从可用性的角度来看,我建议两者都做,这样就涵盖了所有基础。

        【讨论】:

          【解决方案4】:

          根据 HTML 4.01 规范,disabled is a standard attribute for the option element,但根据标准,行为可能是不确定的(阅读有关 select 元素和 options 元素的信息。这是我认为可以阐明 Opera 原因的部分他们的实现:

          设置后,disabled 属性对元素有以下影响:
          * 禁用的控件不会获得焦点。
          * 在标签导航中跳过禁用的控件。
          * 禁用控件无法成功。

          因此,这很可能只是规范模糊到允许两种解释的情况之一。正是这种特质让网络编程变得如此有趣和有益。 :P

          【讨论】:

            【解决方案5】:

            我们是否只是排除了“onchange”下降 完全下降,或者应该 “选择...”选项是可选择的,只是 没有效果?

            “onchange”下拉菜单被更多的标准痴迷类型所反对。

            我通常会做一些客户端验证。 “请从下拉列表中选择一个项目”之类的东西。即

            “选择...”选项是否应该可以选择,只是没有效果?

            所以我只是对你的 A 或 B 问题说“是”。 :/ 对不起!

            【讨论】:

              【解决方案6】:

              不幸的是,应该发生什么并不重要,因为 IE 不支持选项期间的 disabled 属性。

              http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-06-06
                • 1970-01-01
                • 2022-07-16
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多