2

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

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

如果单击后我在同一页面上,它可以工作。但如果我导航到其他页面,它就不起作用。那么假设它setTimeout适用于特定页面而不是整个应用程序是否正确。

有什么办法可以做我想要实现的目标。

4

5 回答 5

8

浏览器中发生的一切都是文档绑定的。当您离开当前文档(页面)时,它会像预期的那样被淘汰,包括计时器。

因此,仅使用计时器是不可能的。

可以编写一个localStorage(或sessionStorage)项目,其中包含计时器开始的时间和应该完成的时间,并从新页面(假设它来自同一来源)阅读该项目并计算差异并启动一个新计时器(或添加参数作为您导航到的 url 的一部分)。

于 2013-10-17T08:14:55.967 回答
1

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

于 2013-10-17T08:24:39.277 回答
0

是的,它与它所在的页面有关。您可以添加一个标志,说明超时是否有

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

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

于 2013-10-17T08:13:48.407 回答
0

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

您可以尝试单页应用程序,您的所有页面都在同一个 DOM 中并且可以实现您的结果

于 2013-10-17T08:18:40.590 回答
0

试试这个解决方案:

在你的firstpage.html,

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

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

如果你需要在第一页到第二页调用一个函数,你应该把这个函数写成全局的

于 2013-10-17T08:23:56.050 回答