10

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

<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完全排除下拉菜单,还是应该选择“选择...”选项,只是没有效果?

4

6 回答 6

6

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

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

于 2008-09-08T14:26:54.310 回答
3

HTML 规范声明 selected 和 disabled 都是<option>元素的可用选项,但没有指定在发生冲突时应该发生什么。在关于禁用控件的部分中,它说

设置后, disabled 属性对元素有以下影响:

  • 禁用的控件不会获得焦点。
  • 在选项卡导航中会跳过禁用的控件。
  • 禁用的控件不能成功。

它还说

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

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

于 2008-09-08T14:32:51.800 回答
2

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

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

于 2008-09-08T14:54:17.927 回答
1

根据 HTML 4.01 规范,disabledoption 元素的标准属性,但根据标准,行为可能是不确定的(阅读有关 select 元素和 options 元素的信息。这是我认为可以阐明的部分Opera 实施的原因:

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

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

于 2008-09-08T14:33:05.310 回答
0

我们只是完全排除了“onchange”下拉菜单,还是应该选择“select...”选项,只是没有效果?

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

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

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

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

于 2008-09-08T15:13:06.353 回答
0

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

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

于 2008-10-03T18:27:05.333 回答