我正在尝试编写一个脚本来每秒更新一次iframe。这是我到目前为止,由于某种原因它加载了一段时间,然后显示数字14541 +/- 50左右。 “东西”和“其他东西”这两个词也从未出现在屏幕上。
是否因为某些内置的浏览器防范无限循环或某事而停在14541?为什么定时器无法正常工作?
var c = 0;
var t;
timer();
document.write("something");
function timer(){
if(t) { window.clearTimeout(t) }
update_preview();
c++;
t=setTimeout(timer(), 1000);
document.write("something else");
}
function update_preview(){
prev = window.open("","preview");
prev.document.open();
prev.document.writeln("<html><head><title>live preview window</title></head><body>");
prev.document.writeln(c);
prev.document.writeln("</body></html>");
prev.document.close();
}
答案 0 :(得分:1)
使用此,
t=setTimeout(function(){timer();}, 1000);
或
t=setTimeout(timer, 1000);
或
t=setTimeout("timer()", 1000);
最后一个是不应使用的选项。
答案 1 :(得分:0)
删除()
之后的timer
。
通过添加timer()
,您立即调用timer
函数并指定返回值(undefined
,因为您没有return
该函数中的任何内容)是计时器用完时执行的函数。
相反,你应该放timer
。这会将函数本身而不是其返回值传递给定时器用完时调用的函数。
另外,为清楚起见,我建议将function timer() {...}
位放在初始调用之前timer()
。 JavaScript会自动为您执行此操作(称为“提升”),但如果您自己首先放置函数定义,则更容易理解。
答案 2 :(得分:0)
在这一行t=setTimeout(timer(), 1000);
上,您没有将timer
传递给setTimout,而是传递timer
的结果。您应该使用t=setTimeout(timer, 1000);
代替。
答案 3 :(得分:0)
您不能将方法计时器作为功能计时器的参数调用。您必须作为参数函数计时器传递:
的setTimeout(定时器,1000);
不要使用document.write已过时。查看DOM和jQuery,以便动态地操作页面。
答案 4 :(得分:0)
“其他东西”未显示的原因是因为当您调用setTimeout并传入函数时,timer
函数会立即处理。在函数内部也发生了同样的事情。因此,您正在创建一个非终止无限递归循环,这将使您的浏览器无响应。
由于每次运行setTimeout
函数(每1秒)而不是timer
运行timer
时,setTimeout
运行setInterval
,您应该{ {1}}。
所以你的代码看起来像这样:
var c = 0;
var t;
timer();
// call setInterval here to run the timer function every 1 second
t=setInterval('timer()', 1000);
document.write("something");
function timer(){
if(t) { window.clearTimeout(t) }
update_preview();
c++;
document.write("something else");
}
function update_preview(){
prev = window.open("","preview");
prev.document.open();
prev.document.writeln("<html><head><title>live preview window</title></head><body>");
prev.document.writeln(c);
prev.document.writeln("</body></html>");
prev.document.close();
}
所以现在不是每隔1秒运行一次setTimeout,而是运行setInterval一次,它将每1秒处理一次。
答案 5 :(得分:0)
最好使用setInterval而不是setTimeout。