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

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

有帮助吗?

解决方案

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

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

其他提示

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

浏览器可以很好地呈现它,使其看起来像是被选中的,但它不应该显示在发布的数据中。看来 Opera 很适合我。

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

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

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

它还说

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

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

根据 HTML 4.01 规范, 残疾人 选项元素的标准属性, ,但根据标准,行为可能是不确定的(阅读 select 元素和 options 元素的信息。我认为以下部分可以阐明 Opera 实施它们的原因:

设置后,disabled 属性会对元素产生以下影响:
* 禁用的控件不会获得焦点。
* 选项卡导航中会跳过禁用的控件。
* 禁用控制无法成功。

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

我们是否只是完全排除“ on Change”下拉菜单,还是应该选择“选择...”选项,而无效?

“onchange”下拉菜单不被更多痴迷于标准的类型所接受。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top