setTimeout没有第一次执行

时间:2012-08-22 17:27:36

标签: javascript

我正在尝试使用setTimeout。我希望它每隔五秒执行一次,但不会在调用setTimeout时立即执行。我无法让它发挥作用:

firsttime = true;
window.setTimeout(function () {
    if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;
}, 5 * 1000);

5 个答案:

答案 0 :(得分:6)

在您window.location.reload()页面后,所有JavaScript变量和计时器都会丢失。第二次加载页面时,firsttime再次为true

所以你要做的是:当用户第一次进入页面时,在10秒后刷新它。然后每5秒刷新一次。问题是:HTTP是statelss,每次用户进入页面时,第一次 。中间没有记忆或状态。

你能做的是:

  • 使用Cookie或HTTP会话记住用户已进入该页面。第一次使用setTimeout() 10秒。在该页面上的每个后续条目中,您使用5秒(setInterval()在这里毫无价值)

  • 输入first.html等待10秒后重定向到second.html。相同,但硬编码5秒延迟。查询参数或哈希标记也可用于持久化状态。虽然有点hacky。

  • 偶尔刷新整个页面就是2000-ish。考虑和部分DOM更新。

答案 1 :(得分:3)

setTimeout只运行一次。

setInterval每隔X毫秒运行一次。

firsttime = true;
window.setInterval(function () {
    if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;
}, 5 * 1000);

答案 2 :(得分:2)

您正在寻找setInterval。它采用相同的参数,但每X秒执行一次回调,而不是一次。

答案 3 :(得分:2)

setTimeout只运行一次,此时条件(!firsttime)不成立(firsttimetrue,所以没有任何反应。

你可以留下这张支票。该功能将立即加载。第一次执行将在指定的延迟之后执行。

如果您正在寻找重复执行,请检查setInterval。但是您应该意识到window.location.reload();重新加载整个页面,包括其中的JavaScript,因此它只能执行一次(然后重新加载页面,清除间隔并重新初始化JS,使用另一个超时实例)。

在您的情况下,HTML刷新会更有用:

<meta http-equiv="refresh" content="5;url=yourwebpage">

答案 4 :(得分:1)

if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;

这只会执行一次因为你在5秒内调用超时:

window.setTimeout(function () {
}, 5 * 1000);

当你希望它每5秒钟继续执行时;使用setInterval:

firsttime = true;
window.setInterval(function () {
    if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;
}, 5 * 1000);

但是;使用10秒的setTimeout就足够了:

window.setTimeout(function () {
    window.location.reload();
}, 10 * 1000);

因为当页面重新加载时,变量firsttime将重置为true