2013-05-04 130 views
2

脚本1将会记录two,但浏览器仍会将select元素渲染为一个。该表格还将提交值one脚本2将记录,呈现并提交two。我期望他们是同义词并且做同样的事情。请解释他们为什么会有所不同以及我应该在哪里寻找相同的不一致。为什么select.setAttribute('value',value)产生与select.value = value不同的结果?

据我所知,DOM中的select元素实际上并不包含value属性。第一种方法明确指定它并从该元素中检索值,而不影响渲染。在select元素的情况下,我该如何正确使用setAttributegetAttribute

演示文档:

<select id="el"> 
    <option value="one">One</option> 
    <option value="two">Two</option> 
</select> 

脚本1:

document.getElementById('el').setAttribute('value','two'); 
console.log(document.getElementById('el').getAttribute('value')); 

脚本2:

document.getElementById('el').value = 'two'; 
console.log(document.getElementById('el').value); 
+0

脚本2工作正常http://jsbin.com/osexuw/1/edit – elclanrs 2013-05-04 00:35:00

+0

@elclanrs,是的,我意识到这一点。我想了解为什么*脚本1 *不起作用。我重读了我的文章,但仍然认为这很明确。 – Aeyoun 2013-05-04 00:38:36

+0

你已经说过了 - 'value' *属性*对于''元素来说是不同的。在解析DOM时,将创建* properties *并创建从* attributes *(如果提供)...和additional * properties *中获取的值。所以设置一个没有转换成属性的*属性什么也不做。但它仍然是一个*属性*,您可以访问。 – Ian 2013-05-04 00:45:54

回答

1

由于value属性定义该元素的初始值,而value属性是实际值。

元素创建后,设置value属性没有意义,因为它几乎没有任何功能。

+0

'value' *属性*与''元素。 – Ian 2013-05-04 00:48:05

2

属性和属性之间有区别。

当元素最初被解析时,属性将从HTML代码中的值填充。然后将这些值复制到具有相应名称的属性中。所以,该属性包含初始值,并且该属性包含当前值。

如果更改属性,则更改元素认为是初始值的内容,但这不会改变当前值的大小。

3

MDN没有提到一个属性为<select>,也许你的意思的<option>选择属性。甲属性将适用于其它一些形式的相关元素,如<input><textarea>

尽管如此,同样适用于选定属性作为与属性对那些其它元件;它不会更改当前值,而只会更改<select>的默认值/初始值。您可以始终使用.reset父级<form>使其适用(但也会重置所有其他与表单关联的元素)。例如;

<!-- HTML --> 
<form id="f"> 
    <select id="el"> 
     <option value="one">One</option> 
     <option value="two">Two</option> 
    </select> 
</form> 

现在使用的JavaScript上设置一个<option>一个选择属性,那么reset<form>;

document.getElementById('el').options[1].setAttribute('selected','selected'); 
document.getElementById('f').reset(); // make it get applied by resetting form 

Demo fiddle

HTMLSelectElement DOM interface确实有一个属性值,并且这被定义为

这种形式的控制的值,即该第一选择的选项,。

因此,将其设置(以x)通过寻找与匹配x,并且第一选项的可用选项循环(如果找到)选择,作为“第一选择的选项”,改变当前选择。

+0

“只有' – 2013-05-04 01:07:24

+1

废话!对不起,误读:(我开始混淆看到“属性”和“财产”和“选定”一百万次... – Ian 2013-05-04 01:08:55

相关问题