我有一个页面,需要每60秒刷新一次。在此页面上,我正在使用iBox弹出各种项目。我的问题是元刷新会杀死不需要的弹出窗口。请记住,我对JavaScript的使用经验为零甚至很少,因此我的解决方案可能根本上是错误的。
我想出的解决方案是使用javascript进行刷新。页面加载时,我将启动计时器,当ibox弹出时,我将清除计时器,ibox关闭时,我将再次启动计时器。
我通过使用一个简单的功能进行设置。
函数timedRefresh(timeoutPeriod){
var resetId = 0;
resetId = setTimeout(“location.reload(true);”,timeoutPeriod);
}
然后我调用函数<body onload="timedRefresh(60000)">
。
我的问题出在我尝试调用clearTimeout(resetID)
时。我正在尝试从ibox脚本的hide函数调用该方法,但实际上并没有清除计时器。我认为这可能是一个范围问题,我可能需要做某种Object.clearTimeout(Object.resetID)
,但这只是一个猜测。
最佳答案
做这个:
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。
看到您的评论,我会添加一些内容。
“窗口。”在浏览器中编写脚本时可以使用,如果您在其他地方使用JS可能不起作用。
只要您在网页上,窗口就是全局对象和“窗口”。前缀是IMO明确表明某些变量是全局变量的好方法;如果您始终使用它,则所有没有“窗口”的变量。在他们面前总是本地的。
但是,您应该知道,如果只使用没有任何前缀和var的resetId,它也将起作用,因为未使用var声明的任何变量都将自 Action 用域为window。
This short-ish guide将教您有关Java语言中的变量可见性,执行上下文和闭包的大部分知识。它将使您成为致命的Javascript忍者。