Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我更改属性,会发生什么情况;精选;关于<;选项>;元素通过Javascript?_Javascript_Html_Dom_Html Select - Fatal编程技术网

如果我更改属性,会发生什么情况;精选;关于<;选项>;元素通过Javascript?

如果我更改属性,会发生什么情况;精选;关于<;选项>;元素通过Javascript?,javascript,html,dom,html-select,Javascript,Html,Dom,Html Select,如果我通过Javascript更改元素上的属性“selected”,会发生什么 示例 HTML 我找不到任何关于这应该做什么的文档(尽管它似乎改变了下拉框中所选的选项) 我在Firefox中尝试过,发现在上设置属性有时会选择该选项,有时则不会,而在Chrome中它总是有效的。那么它应该做什么呢?这在任何规范中都有描述吗 注: 我知道我可以通过JS更改选择,例如使用选项。selected=true/false或select.value=。所以我的问题不是如何改变选择;我只是想了解如果我操作属性会

如果我通过Javascript更改
元素上的属性“selected”,会发生什么

示例

HTML

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

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

注:


我知道我可以通过JS更改选择,例如使用
选项。selected=true/false
select.value=
。所以我的问题不是如何改变选择;我只是想了解如果我操作属性会发生什么。

HTML5.1规范说,对于元素

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

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

接下来是改变元素“选择性”的结果

如果 元素的选择性为true,否则为false

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

然后,对于元素,它说:

如果缺少多属性,则只要 select元素的选项列表的selectedness设置为true。。。 用户代理必须设置所有其他选项的可选择性 将其选项列表中的元素设置为false

selectedOptions IDL属性必须返回HTMLCollection根目录 在“选择”节点,其筛选器与列表中的元素匹配 将其selectedness设置为true的选项

获取时,selectedIndex IDL属性必须返回 选项列表中按树顺序排列的第一个选项元素 它的selectedness设置为true(如果有)。如果没有,那一定是 返回−一,

获取时,value IDL属性必须返回 选项列表中按树顺序排列的第一个选项元素 selectedness设置为true(如果有)。如果没有,那一定是 返回空字符串

以及在提交表格时,在:

如果field元素是select元素,那么对于每个option元素 在select元素的选项列表中,其selectedness为true,并且 如果未禁用,请使用 name作为名称,option元素的值作为值,以及 类型作为类型


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

生成HTML很好,但我不会依赖于此更改选定的值,属性往往是初始值,并不总是更新页面的实时版本。@vittore:是的,我也找到了该页面。但是,它没有说明更改属性“selected”意味着什么。因此,我的问题是…它也可以在firefox上工作,但它正在缓存js文件,看起来它没有改变。我试过你在我的本地主机上说的话,它的工作原理与chromeThanks相同。然而,它只讨论了“IDL属性”,正如您所解释的,这些属性在Javascript中被称为“属性”。我的问题是关于“HTML属性”(使用getAttribute/setAttribute访问)。所以这似乎并没有回答我的问题:-)。引用的第一段是关于内容属性(getAttribute/setAttribute)。抱歉,如果不清楚的话。@sleske-我已经稍微改写了答案,以便更清楚地说明与
setAttribute
方法相关的部分。谢谢。因此,从本质上讲,规范只说“selected”设置初始值,如果稍后添加元素,它会导致元素变为selected。特别是,删除属性没有定义的含义。顺便说一句,Firefox没有遵循规范:通过JS添加属性“selected”会选择该选项,但前提是用户没有手动更改该选项。一旦用户更改了选项,设置属性就不会选择元素(使用property/IDL属性“selected”会起作用)。
<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');