2009-12-22 130 views
3

我有一个页面需要每60秒刷新一次。在此页面上,我使用iBox弹出各种项目。我的问题是元刷新杀死不需要的弹出窗口。请记住我对JavaScript的使用经验不多,所以我的解决方案可能根本不对。启动并停止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)但这只是一个猜测。

+0

这些解决方案大多数都是正确的。问题显然是一个范围问题,解决方案就是您想要使用的范围。如果使用window.resetId有任何问题,我会改变我的答案,但那就是我使用的,所以这就是答案。 – UmYeah 2009-12-22 16:15:46

+0

添加有用的东西给我的答案 – 2009-12-23 08:01:36

回答

1

的链接做到这一点:从相关ibox的功能使用window.resetId

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

然后。


查看您的评论我会添加一些内容。

“窗口”。将在浏览器中编写脚本时起作用,如果你在其他地方使用JS,它可能无法工作。

只要你在一个网页上,然而,窗口是全局对象和“窗口”。前缀是IMO的一个很好的方式,可以清楚地表明某些变量是全局的;如果你一贯地使用它,所有没有“窗口”的变量。在他们面前永远是本地的。

你应该知道但是,它也将工作,如果你只是用的resetID没有任何前缀和不VAR因为不与VAR声明的变量自动作用域窗口

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

+0

伟大的东西。感谢您的额外信息。 – UmYeah 2009-12-23 14:02:20

0

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

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

或者,你也许可以在同一范围内定义的iBox的隐藏功能,但我不太知道如何iBox的作品。

范围的详细阅读:http://javascript.about.com/library/bltut07.htm

0

你是对的,问题是变量resetId的范围。正如您在关键字var的函数中声明的那样,它在本函数中是本地的,因此它不在其外部。

简单地声明resetId之外的功能,使其全球性的,你会被罚款:

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