在下面的例子中,为什么输入“test”的“值”不会更新为“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>
答案 0 :(得分:5)
因为Javascript将x指定为值而不是对原始对象的引用。
例如,您可以改为:
function setText(x) {
document.getElementById('test').value = x;
}
getText = function() {
return document.getElementById('test').value;
}
您使用setText()
设置的值将由getText()
反映,因为getText()
也将使用参考对象的值,而不是值的副本。
修改强>
正如布莱恩指出的那样,这将是一个全球范围的参考副本:
var test = document.getElementById('test');
function setText(x) {
test.value = x;
}
getText = function() {
return test.value;
}
原始test
变量存储对元素的引用,而不是与元素属性关联的值。
答案 1 :(得分:3)
您正在将值复制到变量。更改变量不会更改原始变量,因为变量只包含副本。
如果将元素的引用存储在变量中,则可以使用它来设置值:
var test = document.getElementById('test');
test.value = "second";
答案 2 :(得分:1)
您将元素的值分配给变量,然后更改变量。这不会反映在元素的值中。您需要改变元素的值。
document.getElementById('test').value = "second";
答案 3 :(得分:0)
因为您将test
的值设置为字符串document.getElementById('test').value
。
你没有把两者连在一起。
如果您希望这样做,可以使用以下功能:
function test(x) {
document.getElementById('test').value = x;
}
test('foo');
在Python中,你可以这样做。在JavaScript中,我不这么认为。
答案 4 :(得分:0)
因为
document.getElementById('test').value
是一个吸气剂,其中
document.getElementById('test').value = "second"
是一个二传手
答案 5 :(得分:0)
test = document.getElementById('test').value;
...只为您提供该时刻价值的副本。当您修改test
时,您需要将其重新放入您想要更改的输入字段中:
var test_input = document.getElementById('test');
test_input.value = "second";
答案 6 :(得分:0)
将局部变量test
设置为“秒”将不执行任何操作。我假设您希望getText更新DOM。试试这个:
getText = function() { document.GetElementById('test').value("second"); }
答案 7 :(得分:0)
指向元素而不是值:http://jsbin.com/axufi4/edit
答案 8 :(得分:0)
尽管javascript最终将所有内容视为对象,但我相信只有数组和对象才能通过引用传递。字符串,整数和浮点数按值传递。
文本输入将始终为您提供一个字符串(即使您将输入限制为数字)
答案 9 :(得分:0)
<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>
答案 10 :(得分:0)
你需要这样做:
document.getElementById('test').value = "second";
或
var el = dcument.getElementById('test');
el.value = "second";
至于为什么,我认为它与Javascript是一个“通过参考传递”或“通过价值传递”语言有关,在这个主题上有一个very interesting discussion在这里。 (我不确定这一点,如果我错了,请纠正我。)
答案 11 :(得分:0)
因为它是一个字符串并作为值传递,而不是作为引用传递。因此值的内容将复制到 test