JavaScript>如果我设置“var x = document.getElementById('inputText')。value”并且我更新“x”,为什么值不更新?

时间:2011-06-06 21:01:41

标签: javascript

在下面的例子中,为什么输入“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>

12 个答案:

答案 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;
}

http://jsfiddle.net/nLj2A/

原始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