输入类型中的值在等待函数后未显示

时间:2012-05-13 20:34:36

标签: javascript javascript-events

我有一个无效的简单功能:

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毫秒)之后显示,但它永远不会出现。

有人可以告诉我,我做错了什么? 日Thnx!

2 个答案:

答案 0 :(得分:2)

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

尝试:

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

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

答案 1 :(得分:1)

你无法延迟同步执行; JavaScript没有类似sleep的函数,请不要考虑使用循环和Date对象来模拟它,因为这会挂起整个浏览器,直到延迟循环结束。

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

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

顺便说一下,要在1000ms之后执行函数doNothing,你可以将doNothing传递给setTimeout - 当传递doNothing()时,你传递了该函数的返回值通常不是你想要的。