setAttribute()不像我期望的那样工作

时间:2015-04-28 20:57:50

标签: javascript html

这行代码:

document.getElementById('01').getElementsByTagName("input")[0].setAttribute("value", "1");
当“输入”还没有值时,

完全正常。但是当输入已经有值时,它不会改变该值。这是为什么?

3 个答案:

答案 0 :(得分:15)

听起来您遇到了元素属性valuevalue属性之间令人困惑的区别。这些不一样

问题是value-attribute用于默认值的目的,因此如果元素已经具有属性值,则更改value-attribute将不会反映在UI中。

文档说this

  

使用setAttribute()修改某些属性,尤其是XUL中的值,因为属性指定了默认值,因此工作不一致。要访问或修改当前值,您应该使用属性。例如,使用elt.value而不是elt.setAttribute('value',val)。

为了证明这种情况,请考虑这个小小的演示:

document.getElementById("01").getElementsByTagName("input")[0].value = 'property set';

document.getElementById("01").getElementsByTagName("input")[0].setAttribute("value", "two");
<div id="01">
    <input type="text" />
</div>

在上面的代码段中,value属性确实更新为值two,如果您尝试使用getAttribute('value')读取它,则可以验证它,但是value-property优先于属性,所以以后不会渲染。

答案 1 :(得分:1)

当代码已经具有<input>属性时,JavaScript绝对会更改value代码的值。请在此处查看:http://jsfiddle.net/qg7d4m32/

答案 2 :(得分:1)

输入字段

如果要设置值,只需使用值

纯javascript:

document.getElementById('01').getElementsByTagName("input")[0].value = "value"

jQuery的:

 $("input").val("value")