在HTML中,选定的禁用选项元素应该怎么办?
在我的特定示例中,我正在处理一个下拉列表,例如:
<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"下拉列表,还是应该选择" select ..."选项,而没有任何效果?
解决方案
回答
对于这种奇怪的组合,HTML规范有点含糊(即完全缺乏)。他们确实说设置了禁用属性的表单元素应该不会成功,因此实际上是无法选择的。
浏览器可以很好地呈现它,使其看起来处于选中状态,但不应在POSTed数据中显示。看起来Opera确实适合我。
回答
HTML规范指出,选中和禁用都是<option>元素的可用选项,但未指定发生冲突时应发生的情况。在"禁用控件"部分中,它说
When set, the disabled attribute has the following effects on an element: Disabled controls do not receive focus. Disabled controls are skipped in tabbing navigation. Disabled controls cannot be successful.
它也说
How disabled elements are rendered depends on the user agent. For example, some user agents "gray out" disabled menu items, button labels, etc. In this example, the INPUT element is disabled. Therefore, it cannot receive user input nor will its value be submitted with the form.
尽管未指定此特定情况,但我的阅读内容表明,"选定""禁用"元素的实际呈现方式由浏览器决定。只要用户无法选择它,它就可以正常工作。它确实说脚本可以作用于元素,因此Javascript可以将禁用的选项设置为选中状态(或者禁用选中的选项)。这不违反标准,但是在表单提交时,该选项的值不能为所选值。在这种情况下,选择列表(我认为)必须为空值。
回答
根据HTML 4.01规范,disabled是option元素的标准属性,但是根据该标准,行为可能不确定(请阅读select元素和options元素上的信息。以下是我认为可以理解的部分) Opera实施这些程序的原因:
When set, the disabled attribute has the following effects on an element: * Disabled controls do not receive focus. * Disabled controls are skipped in tabbing navigation. * Disabled controls cannot be successful.
因此,这很可能只是规范含糊不清,无法进行两种解释的情况之一。这种特质使Web编程变得有趣而有意义。 :P
回答
在回答问题中的更新时,我想说'label'选项应该是可选的,但是或者使其在提交时不执行任何操作,或者通过JavaScript不执行任何操作,不允许在不选择值的情况下提交表单(假设它是必填字段)。
从便利的角度来看,我建议同时进行这两种操作,以使所有基础都得到覆盖。
回答
Are we just ruling out 'onchange' drop downs altogether, or should the "select..." option be selectable, just with no effect?
"不变"下拉菜单被更多的痴迷于标准的人所反对。
我通常会做一些客户端验证。 "请从下拉菜单中选择一项"。 IE。
should the "select..." option be selectable, just with no effect?
所以我只是对A或者B问题说"是"。 :/ 对不起!
回答
不幸的是,应该发生什么并不重要,因为IE在选项期间不支持disabled属性。
http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html