如果我通过 Javascript 更改<选项>元素上的属性“选定”会发生什么

What happens if I change attribute "selected" on an <option> element via Javascript?

本文关键字:选定 属性 什么 Javascript 更改 如果 选项 元素      更新时间:2023-09-26

如果我通过 Javascript 更改<option>元素上的属性"selected"会发生什么?

.HTML

<select size="1" id="myselect">
  <option>pepper</option>
  <option selected="selected">salt</option>
</select>

爪哇语

    var selectObj = document.getElementById('myselect');
    selectObj.options[1].removeAttribute('selected');
    selectObj.options[0].setAttribute('selected','selected');

JSFiddle.net 的活生生的例子.

我找不到任何关于这应该做什么的文档(尽管它似乎更改了下拉框中的选定选项(。

我在Firefox中尝试过,发现在<option>上设置属性有时会选择该选项,有时不会,而在Chrome中它总是有效。那么它应该怎么做呢?这在任何规范中都有描述吗?

注意:

我知道我可以通过JS更改选择,例如 option.selected=true/falseselect.value=<newval> .所以我的问题不是找出如何更改选择;我只是想了解如果纵该属性会发生什么。

HTML

5.1规范说,对于选项元素

选项元素的选择性最初是布尔状态 假。...每当添加选项元素的选定属性时, 其选择性必须设置为 True。

因此,当调用 setAttribute("selected", ...( 时,content 属性获得属性值,并且元素的 "selectedness" 状态可能会更改。请注意,当添加元素选定属性时,它表示选项元素的选择性设置为 true。这意味着,如果对已具有 selected 属性的元素调用 setAttribute('selected','selected'),则不需要更改元素的选定性或任何其他选项元素。

接下来是更改元素"选择性"的后果。

选定的 IDL 属性在获取时必须返回 true,如果 元素的选择性为真,否则为假。

(如果您不熟悉该术语,"IDL 属性"是大多数人认为的"属性",例如 opt.selected (

然后,对于选择元素,它说:

如果 multiple 属性不存在,则每当 选择元素的选项列表的"选择性"设置为"true",... 用户代理必须设置所有其他选项的选择性 元素,以将其选项列表为 false。

选定的选项 IDL 属性必须返回 HTML 植根目录 在选择节点上,其过滤器与 选择性设置为 true 的选项。

选定的索引 IDL 属性在获取时必须返回 按树顺序排列的选项列表中的第一个选项元素具有 其选择性设置为 true(如果有(。如果没有,那么它必须 返回 −1。

值 IDL 属性在获取时必须返回 按树顺序排列的选项列表中的第一个选项元素,其 选择性设置为 true(如果有(。如果没有,那么它必须 返回空字符串。

在提交表单时,在构建表单数据集期间:

如果字段元素是选择元素,则对于每个选项元素 在选择元素的选项列表中,其选择性为 true 和 如果未禁用,则在表单数据集后附加一个条目,其中包含 名称作为名称,选项元素的值作为值,以及 键入作为类型。

这是否涵盖了您需要了解的内容?