如果我导航到另一个页面,setTimeout不起作用

时间:2013-10-17 08:09:48

标签: javascript jquery

我试图在特定点击事件后10秒执行javascript。我使用了setTimeout

setTimeout(function () {
    alert('hello');
}, 10000);

如果我在点击后在同一页面上,它会起作用。但是如果我导航到其他页面则不起作用。 因此,假设setTimeout适用于特定页面而不是整个应用程序是正确的。

有没有办法做我想要达到的目标。

5 个答案:

答案 0 :(得分:7)

浏览器中发生的一切都是文档绑定。当您离开当前文档(页面)时,它将被废弃,包括计时器 - 正如预期的那样。

所以你在这里尝试的只是使用计时器是不可能的。

可以编写一个localStorage(或sessionStorage)项目,包括计时器启动时间和完成时间,以及新页面(前提是它来自相同来源)您阅读该项目并计算差异并启动一个新计时器(或将参数作为您导航到的网址的一部分添加)。

答案 1 :(得分:1)

Javascript代码是页面绑定的。
如果您在第1页上包含了x1.js,那么除非您已包含该脚本或放入全局范围,否则此脚本将不会在第2页上执行。
当您导航到另一个页面并且浏览器被刷新时,加载的脚本将丢失,并且将加载包含脚本的新页面。

答案 2 :(得分:0)

是的,它与页面有关。您可以添加一个标志,指出超时是否

  • 未设置
  • 已设置但未运行或
  • 设置并已经运行。

然后,如果用户导航到其他页面,您可以在onunload事件中检查该标志。如果已经设置但尚未调用,则只需调用它即可。

答案 3 :(得分:0)

当您导航到另一个页面时,浏览器将加载新页面,旧页面中的所有setTimeout / etc都将丢失,就像游戏结束并开始新游戏一样。

您可以尝试Single Page App您的所有网页都在同一个DOM中,并且可以实现您的结果

答案 4 :(得分:0)

试试这个解决方案:

firstpage.html

function initFunc() {
    setTimeout(function () {
       alert('hello');
    }, 10000);
}
$(document).ready(initFunc);

现在在secondpage.html中,您可以随时调用initFunc()。

如果需要将第一页中的函数调用到第二页,则应将该函数编写为全局