繁体   English   中英

如果我更改了“选择”属性,会发生什么 <option>通过JavaScript元素?

[英]What happens if I change attribute “selected” on an <option> element via Javascript?

如果我通过Java脚本更改了<option>元素上的“ selected”属性,应该怎么办?

HTML

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

使用Javascript

    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规范说,对于option元素

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

因此,当调用setAttribute(“ selected”,...)时,content属性获得属性值,并且元素的“ selectedness”状态可以更改。 请注意,尽管它说在添加元素selected属性时将option元素的selectedness设置为true。 这意味着,如果在已经具有selected属性的元素上调用setAttribute('selected','selected') ,则不需要更改元素或任何其他option元素的选择。

接下来是更改元素的“选择度”的后果。

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

(如果您不熟悉该术语,那么“ IDL属性”就是大多数人认为的“属性”。例如opt.selected

然后,对于select元素,它说:

如果不存在multiple属性,则只要将select元素的选项列表中的option元素的selectivity设置为true,...,用户代理必须将其选项列表中所有其他选项元素的selectness设置为false。

selectedOptions IDL属性必须返回一个以select节点为根的HTMLCollection,该HTMLCollection的过滤器与将selectivity设置为true的选项列表中的元素匹配。

selectedIndex IDL属性在获取时必须以树顺序返回选项列表中第一个选项元素的索引,且其选择度设置为true(如果有)。 如果没有,则它必须返回-1。

值IDL属性在获取时必须以树顺序返回选项列表中第一个选项元素的值,该选项的选择度设置为true(如果有)。 如果没有,则必须返回空字符串。

构造表单数据集期间提交表单时:

如果field元素是select元素,则对于select值为true且未禁用的select元素的select元素列表中的每个option元素,将一个条目添加到表单数据集,其名称为name,值为选项元素作为值,并键入type。

那涵盖了您需要知道的内容吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM