0

我有一个什么都不做的简单函数:

function doNothing(){}

我也有一个看起来像这样的函数:

function getJson() {
    var JSONObject = {
        "name": "John Johnson",
        "street": "Oslo West 555",
        "age": 33,
        "phone": "5551234var stuff = <%= @var %>;567"
    };
    document.getElementById("name").value = JSONObject.name;
    setTimeout(doNothing(), 1000);
    document.getElementById("street").value = JSONObject.street;

所以doNothing()函数实际上只是在这里,所以我可以在setTimeout函数中放置一个参数。

整个 javascript 代码的要点是我希望立即显示第一个值,并在 1 秒(1000 毫秒)后显示第二个值,但它永远不会出现。

有人可以告诉我我做错了什么吗?谢谢!

4

2 回答 2

2

settimeout 不是睡眠函数,它会在 1000 毫秒后调用一个函数。您的其他代码仍将立即执行。

尝试:

document.getElementById("name").value = JSONObject.name;

setTimeout(function(){
    document.getElementById("street").value = JSONObject.street;
}, 1000);
于 2012-05-13T20:37:39.743 回答
1

您不能延迟同步执行;JavaScript 没有sleep类似的功能,请不要考虑使用循环和Date对象来模拟它,因为这会使整个浏览器挂起,直到延迟循环完成。

要解决您的问题,只需将应该延迟的代码放在setTimeout回调函数中。由于它将是一个闭包,因此您可以轻松访问先前范围中存在的任何变量。

document.getElementById("name").value = JSONObject.name;
setTimeout(function() {
    document.getElementById("street").value = JSONObject.street;
}, 1000);

顺便说一句,要doNothing在 1000 毫秒后执行该函数,您将传递doNothingsetTimeout- 传递时传递doNothing()该函数的返回值,这通常不是您想要的。

于 2012-05-13T20:37:39.073 回答