是否可以在localstorage中存储setTimeout函数?

时间:2013-04-24 05:28:00

标签: javascript jquery local-storage settimeout

如果我有以下的javascript代码。

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

localStorage.setItem('timeout_event', timeout);

我已将setTimeout函数的返回值检查为id或其他内容。如果用户刷新页面,我该如何重新运行超时事件?它甚至可能吗?

任何帮助都可以。提前谢谢。

3 个答案:

答案 0 :(得分:2)

  

我已将setTimeout函数的返回值检查为id或其他内容。

是的,它是一个数字ID,您可以将其传递给clearTimeout以取消预定的函数运行。

  

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

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

  

甚至可能吗?

是和否。您将无法运行您从最后一页调度的函数 - 它的所有上下文/范围都将丢失 - 您需要在新页面的上下文中创建一个新函数。

但是,如果您想根据页面的超时/间隔执行某些功能,可以使用DOM storage或类似功能执行此操作。您将存储指定函数运行的时间戳,以及是否已运行的标志。这样,您可以检查以下页面是否以及何时需要重新安排该功能。

答案 1 :(得分: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会在刷新页面后立即计算时间,这对我来说很好用

答案 2 :(得分:1)

感谢帮助人员。

我设法找到解决问题的方法。

<!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>

我希望这对其他人有用。

再次,谢谢大家。