1

前提是我有下面的 javascript 代码。

var timeout = setTimeout(function(){
                alert('this is executed after 5 seconds');
              }, 5000);

localStorage.setItem('timeout_event', timeout);

我已经检查了 setTimeout 函数的返回值是一个 id 什么的。如果用户刷新页面,如何重新运行超时事件?甚至可能吗?

任何帮助都可以。先感谢您。

4

3 回答 3

2

我已经检查了setTimeout函数的返回值是一个 id 什么的。

是的,它是一个数字 ID,您可以传递给它clearTimeout以取消计划的函数运行。

如果用户刷新页面,如何重新运行超时事件?

是的,当页面卸载时,所有未完成的超时都会中止,因此您需要在新页面上重新启动超时。

甚至可能吗?

是和不是。您将无法运行您从最后一页安排的功能 - 它的所有上下文/范围都将丢失 - 您需要在新页面的上下文中创建一个新功能。

但是,如果您想基于跨页面的超时/间隔来执行某些功能,您可以使用DOM 存储或类似方法来实现。您将存储指定函数运行的时间戳,以及它是否已经运行的标志。这样,您可以在以下页面上检查是否以及何时需要重新安排该功能。

于 2013-04-24T08:32:15.287 回答
1

Thanks for the help guys.

I managed to find a way to solve the problem.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

    <title>Testing</title>
    <script type="text/javascript">
        var timeout_time = 10;
        var time_remaining = 0;

        if(localStorage.getItem('timeout_time')==null){
            run_timeout(timeout_time);
        }
        else{
            run_timeout(localStorage.getItem('timeout_time'))
        }

        setInterval(function(){
            time_remaining = localStorage.getItem('timeout_time');

            if(time_remaining > 1 || time_remaining != null){
                localStorage.setItem('timeout_time', time_remaining - 1);
            }
        }, 1000);

        function run_timeout(time){
            setTimeout(function(){
                alert('executed on 10 seconds');
                localStorage.removeItem('timeout_time');
            }, time * 1000);
            localStorage.setItem('timeout_time', time);
        }


    </script>
</head>
<body>
    This is the test page.
</body>
</html>

I hope this can be useful for others.

Again, thank you all.

于 2013-04-24T08:37:50.290 回答
1

如果您希望在页面刷新时执行超时功能,您只需将功能添加到window.onload

var timeout = setTimeout(function(){
                alert('this is executed after 5 seconds');
              }, 5000);

window.onload = timeout;

这对我来说很好

如果你希望它被执行多次,然后去setInterval()

var timeout = setInterval(function(){
                alert('this is executed for each second');
              }, 1000);

window.onload = timeout;

它会一直执行到你调用clearInterval(timeout);

如果你想要多个超时,那么你应该做这样的事情

var timeout = setTimeout(function(){
                alert('this is executed after 1 second');
              }, 1000);

var timeout1 = setTimeout(function(){
                alert('this is executed after 2 seconds');
              }, 2000);

var timeout2 = setTimeout(function(){
                alert('this is executed after 3 seconds');
              }, 3000);
window.onload = timeout;timeout1;timeout2;

这是因为 setTimeout 会在页面刷新后立即计算时间,这对我来说很好用

于 2013-04-24T05:33:26.047 回答