0

很久以前,当我第一次开始构建我的页面(用于系统监控)时,我添加了:

<script language="javascript" type="text/javascript">setTimeout("location.reload();",60000);</script>

使页面每 60 秒重新加载一次。

到目前为止,它一直运作良好。但它 [页面] 随着更多 PHP 和更多使用 JQuery 等而增长)。

我现在正在寻找一种方法来暂停 setTimeout / 然后稍后恢复它。

我有一些 jQuery,当一个元素被右键单击时,它会加载一些数据,并显示一个带有该结果的小表。但我希望它在显示该表时,页面不会刷新。当页面再次隐藏时,setTimeout 恢复。

最好的方法是什么?(注意 60000 目前是在 PHP 中通过配置变量设置的)。

4

2 回答 2

1

你不应该使用 string 来调用里面的函数setTimeout——它和使用eval(). 相反,您可以这样做:

var 
timeout = null,
start = function () {
    timeout = setTimeout(function () { location.reload(); }, 60000);
},
stop = function () {
    if (timeout) clearTimeout(timeout);
};

start();

// and, on button click, call:
stop();
于 2013-11-01T14:31:48.670 回答
1

编辑

好的,我对我在这里所做的一些愚蠢的事情做了一些更新,现在它正在工作。我还添加了用于调试的 console.log,所以你可以看到你在这篇文章中浪费的时间:]

var pageReloader = function () {

    var timeout = null,
        startTime = 0,
        remainingTime = 0,
        delay = 60;

    return {
        start: function () {
            startTime = (new Date()).getTime();
            remainingTime = delay * 1000;
            timeout = setTimeout(function () {
                location.reload();
            }, delay * 1000);

        },

        stop: function () {
            if (timeout) clearTimeout(timeout);
        },

        pause: function () {
            if (timeout) {
                clearTimeout(timeout);
                remainingTime = (remainingTime) - ((new Date()).getTime() - startTime);
                console.log(remainingTime); // DEBUG
            }
        },

        unpause: function () {
            if (timeout) {
                startTime = (new Date()).getTime();
                timeout = setTimeout(function () {
                    location.reload();
                }, remainingTime);
            }
        }
    };

}();

pageReloader.start();
pageReloader.pause();
pageReloader.unpause();
于 2013-11-01T14:46:20.560 回答