启动和停止javascript刷新

时间:2009-12-22 15:23:01

标签: javascript refresh

我有一个页面需要每60秒刷新一次。在这个页面上,我使用iBox来弹出各种项目。我的问题是元刷新会杀死不想要的弹出窗口。请记住,我对javascript的经验很少,所以我的解决方案可能从根本上是错误的。

我想出的解决方案是使用javascript进行刷新。当页面加载时我将启动计时器,当ibox弹出时我将清除计时器,当ibox关闭时我将再次启动计时器。

我是通过使用一个简单的函数来设置的。

function timedRefresh(timeoutPeriod){
    var resetId = 0;
    resetId=setTimeout("location.reload(true);",timeoutPeriod);
}

然后我调用函数<body onload="timedRefresh(60000)">

我的问题源于我试图致电clearTimeout(resetID)时。我试图从ibox脚本的隐藏功能调用该方法,但它实际上并没有清除计时器。我认为这可能是一个范围问题,我可能需要做某种Object.clearTimeout(Object.resetID),但这只是猜测。

4 个答案:

答案 0 :(得分:1)

这样做:

function timedRefresh(timeoutPeriod){
    window.resetId = 0; // make it clear it's global by prefixing "window."
    window.resetId=setTimeout("location.reload(true);",timeoutPeriod);
}

然后从相关的ibox函数中使用window.resetId。


看到你的评论我会添加一些内容。

“window。”将在浏览器中编写脚本时使用,如果您在其他地方使用JS,它可能无法正常工作。

然而,只要你在网页上, window 就是全局对象而“window。”前缀是IMO的一个很好的方法某些变量是全球性的;如果你一直使用它,所有没有“窗口”的变量。在他们面前总是当地的。

但是,您应该知道,如果您只使用 resetId 而没有任何前缀且没有 var ,那么它也可以工作,因为任何未使用 var 自动限定为 window

This short-ish guide将教你大部分关于Javascript,执行上下文和闭包中变量可见性的知识。它会让你成为一个致命的Javascript忍者。

答案 1 :(得分:0)

最简单的方法是将resetId变量添加到全局范围:

var resetId = 0;
function timedRefresh(timeoutPeriod){
    resetId=setTimeout("location.reload(true);",timeoutPeriod);
}

或者,您可以在同一范围内定义iBox的隐藏功能,但我不太清楚iBox的工作原理。

有关范围的更多阅读:http://javascript.about.com/library/bltut07.htm

答案 2 :(得分:0)

你是对的,问题是变量resetId的范围。当您在函数中使用var关键字声明它时,它对于此函数是本地的,因此不存在于此函数之外。

只需在函数外部声明resetId以使其成为全局函数,您就可以了:

var resetId = 0;
function timedRefresh(timeoutPeriod){
    resetId=setTimeout("location.reload(true);",timeoutPeriod);
}

答案 3 :(得分:0)

我建议在页面上制作内容,需要刷新,通过ajax更新。以下是教程http://www.w3schools.com/Ajax/Default.Asp

的链接