繁体   English   中英

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

[英]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;
}

http://jsfiddle.net/nLj2A/

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM