我有一些类似于以下的标记:
<select>
<option selected="selected">Apple</option>
<option selected="">Orange</option>
</select>
在这种情况下,“橙色”显示为所选项目。我本来希望将selected
属性设为空白会撤消其效果。有没有办法在不简单地忽略属性的情况下编写这个?
HTML5 规范
https://www.w3.org/TR/html51/sec-forms.html#the-option-element
选择的内容属性是一个布尔属性。
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes:
元素上存在布尔属性表示真值,不存在该属性表示假值。
如果存在该属性,则其值必须是空字符串或与属性的规范名称匹配的不区分大小写的 ASCII 值,并且没有前导或尾随空格。
结论
以下是有效的、等价的和真实的:
<option selected />
<option selected="" />
<option selected="selected" />
<option selected="SeLeCtEd" />
以下是无效的:
<option selected="0" />
<option selected="1" />
<option selected="false" />
<option selected="true" />
缺少该属性是false的唯一有效语法:
<option />
推荐
如果您关心编写有效的 XHTML,请使用selected="selected"
, since<option selected>
是无效的,并且其他替代方案的可读性较差。否则,只需使用它,<option selected>
因为它更短。
不同的浏览器可能会以不同的方式对待这个属性。根据 MSDN 文档(用于 Internet Explorer):
要在 HTML 中选择一个项目,不必将 SELECTED 属性的值设置为 true。SELECTED 属性的存在将其值设置为 true。
在 Firefox 和 Safari 中,这确实有效:
<option selected='false' />
从我可以通过查看 HTML4 的官方 WC3 标准得知,支持的情况仅为:
<option selected='selected' />
您要么需要选择性地发出属性,要么使用 javascript 来控制最初选择的项目。
XHTML 中 selected 属性的唯一允许值是“ selected ”,因此如果您希望标记符合 XHTML 并在所有浏览器中工作,则将其排除在外是使其未选中的唯一选择
在 HTML(相对于 XHTML)中selected
,一个没有任何值的简单属性可以正常工作:
<option selected>Apple</option>
<option>Orange</option>
在 XHTML(包括 XHTML5)中,您需要一个值,它也应该是selected
:
<option selected="selected">Apple</option>
<option>Orange</option>
这在 HTML 中也可以正常工作。
这通常是 (X)HTML 中的布尔值的情况。将它们设置为 false 的方法是完全忽略它们。设置true
和的值false
可能有效,但不是标准的。
请注意,对于选项列表,默认情况下会选择第一个,因此在这种情况下根本不需要。
不, selected 属性的存在告诉浏览器它是选定的项目。引号内的任何内容都将被忽略。
编辑:您可以做的(使用 Javascript)是查找带有 selected="" 的选项标签,并从中删除 selected 属性。
根据w3schools,您应该将其设置为:selected="selected"。这会告诉您最初选择了哪个选项,并允许您稍后通过脚本进行设置。
除了该属性的“选定”之外,没有任何其他有效值。(http://www.w3schools.com/TAGS/att_option_selected.asp)
您最好从 Javascript 设置 selectElement.selectedIndex 属性,或者完全删除该属性。