问候,
我有以下JS代码:
var reloadTimer = function (options) {
var seconds = options.seconds || 0,
logoutURL = options.logoutURL,
message = options.message;
this.start = function () {
setTimeout(function (){
if ( confirm(message) ) {
// RESET TIMER HERE
$.get("renewSession.php");
} else {
window.location.href = logoutURL;
}
}, seconds * 1000);
}
return this;
};
我想重置计时器,我在这里有RESET TIMER的评论。我尝试了一些不同的东西无济于事。调用此块的代码如下:
var timer = reloadTimer({ seconds:20, logoutURL: 'logout.php',
message:'Do you want to stay logged in?'});
timer.start();
代码可能看起来很熟悉,因为我在SO上发现它: - )
谢谢!
答案 0 :(得分:2)
首先,您需要在new
中使用var timer = new reloadTimer
运算符,并且还应将reloadTimer大写为ReloadTimer,以表示它需要与new
一起使用。
您需要new
的原因是因为函数引用了this
,而在没有new
的情况下使用时,这将是全局范围,而不是它自己的实例。
要重置计时器,只需使用计时器参考作为参数
调用window.clearTimeoutvar timer = window.setTimeout(....
...
window.clearTimeout(timer);
更新
通过RESET你的意思是重启计时器吗?
如果是,请使用setInterval
代替setTimeout
更新2
这是一个稍微好一点的方法(如果你仍然希望使用这样的类来封装一些如此微不足道的东西)
var ReloadTimer = function(options){
var seconds = options.seconds || 0, logoutURL = options.logoutURL, message = options.message;
var timer;
return {
start: function(){
timer = setInterval(function(){
if (confirm(message)) {
$.get("renewSession.php");
}
else {
clearInterval(timer);
window.location.href = logoutURL;
}
}, seconds * 1000);
}
};
};
var myTimer = new ReloadTimer({
seconds: 20,
logoutURL: 'logout.php',
message: 'Do you want to stay logged in?'
});
myTimer.start();
答案 1 :(得分:0)
您可以使用相同的参数再次执行该功能吗?