我有一个无效的简单功能:
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!
答案 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()
时,你传递了该函数的返回值通常不是你想要的。