如果我通过Javascript更改<option>元素上的“selected”属性会怎样?</option>

时间:2013-10-11 15:47:30

标签: javascript html dom html-select

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

示例

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');

Live example on JSFiddle.net .

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

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

注意:

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

1 个答案:

答案 0 :(得分:1)

HTML 5.1规范说明了option元素

  

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

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

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

  

获取时所选的IDL属性必须返回true   element的选择性为true,否则为false。

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

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

  

如果多个属性不存在,则每当一个选项元素出现时   select元素的选项列表的选择性设置为true,...   用户代理必须设置所有其他选项的选择性   其选项列表中的元素为false。

  

selectedOptions IDL属性必须返回以root为单位的HTMLCollection   在select节点上,其过滤器与列表中的元素匹配   选择性设置为true的选项。

     

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

     

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

并在提交表单时constructing the form data set

  

如果field元素是select元素,则为每个option元素   在select元素的选择列表中,其选择性为真和   如果没有禁用,请在表单数据集中附加一个条目   name作为名称,option元素的值作为值,以及   输入类型。

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