![](/img/trans.png)
[英]var x=document.getElementById(“mytext”).value;Why i change the value to innerHTMl or innerText,it do not work?
[英]JavaScript > If I set “var x = document.getElementById('inputText').value” and I update “x”, why doesn't the value update?
在下面的例子中,为什么输入“test”的“value”没有更新为“second”?
<html>
<head>
<script type="text/javascript">
getText = function() {
var test = document.getElementById('test').value;
test = "second";
//note: if you insert "alert(test)" it returns "second"
}
</script>
</head>
<body>
<label for="test">Test </label><input type="text" id="test" value="first" onclick="getText()"></input>
</body>
</html>
因为 Javascript 将 x 分配为一个值,而不是对原始 object 的引用。
例如,您可以改为:
function setText(x) {
document.getElementById('test').value = x;
}
getText = function() {
return document.getElementById('test').value;
}
您使用setText()
设置的值将由getText()
反映,因为getText()
还将使用参考对象的值,而不是该值的副本。
编辑
正如 Bryan 指出的那样,这将是一个全局 scope 的引用副本:
var test = document.getElementById('test');
function setText(x) {
test.value = x;
}
getText = function() {
return test.value;
}
原始test
变量存储对元素的引用,而不是与元素属性关联的值。
您正在将值复制到变量中。 更改变量不会更改原始变量,因为变量只包含一个副本。
如果将元素的引用存储在变量中,则可以使用它来设置值:
var test = document.getElementById('test');
test.value = "second";
您将元素的值分配给一个变量,然后更改该变量。 这不会反映在元素的值中。 您需要更改元素的值。
document.getElementById('test').value = "second";
因为您将test
的值设置为字符串document.getElementById('test').value
。
您没有将两者联系在一起。
如果您想这样做,您可以使用 function:
function test(x) {
document.getElementById('test').value = x;
}
test('foo');
在 Python 中,您可以执行此操作。 在 JavaScript 中,我不这么认为。
因为
document.getElementById('test').value
是一个吸气剂,其中
document.getElementById('test').value = "second"
是二传手
test = document.getElementById('test').value;
...仅在那个时刻为您提供价值的副本。 当您修改test
时,您需要将其放回您想要更改的输入字段中:
var test_input = document.getElementById('test');
test_input.value = "second";
将局部变量test
设置为“second”将无济于事。 我假设您希望 getText 更新 DOM。 尝试这个:
getText = function() { document.GetElementById('test').value("second"); }
指向元素而不是值: http://jsbin.com/axufi4/edit
尽管 javascript 最终将所有内容都视为 object,但我相信只有 arrays 和对象是通过引用传递的。 字符串、整数和浮点数按值传递。
文本输入将始终为您提供一个字符串(即使您将输入限制为数字)
<script type="text/javascript">
getText = function() {
var test = document.getElementById('test').value;
test = "second";
//note: if you insert "alert(test)" it returns "second"
document.getElementById('test').value = test;
}
</script>
你需要这样做:
document.getElementById('test').value = "second";
或者
var el = dcument.getElementById('test');
el.value = "second";
至于为什么,我认为这与 Javascript 是“通过引用”或“通过值”语言有关,关于这个问题,这里有一个非常有趣的讨论。 (我不确定这一点,如果我错了,请纠正我)。
因为它是一个字符串并且作为值传递,而不是作为引用传递。 所以将value的内容复制到test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.