所以,我有一个可能与时间一样古老的JavaScript问题,但我似乎无法弄明白。我有一个占用整个页面的表单,并有下一个和后一个按钮,因此用户可以来回浏览问题。 (单页应用,没有完全刷新。如果有这样会很容易!)
其中一个要求是具有超时功能。所以在他们在一段时间之后闲置之后,它会将它们记录下来以保护他们的信息。问题是我的间隔在每次来回翻转新页面时都会不断添加一个新区域。从而创造出多个计时器和疯狂。
我的代码看起来像这样。
var idle = 0;
var idleIntervalTimer = setInterval(timerIncrement, 1000); //This is what keeps being called
var counter = 0;
var timeout = 30;
var count = 20;
var resetCount = 20;
document.onmousemove = function() {
if(app.timer.get('available') === 'Yes'){ //I'm just using this to make sure that they have not already been logged out
count = resetCount;
idle = 0;
app.warning.close();
}
};
function timerIncrement() {
if(app.timer.get('available') === 'Yes'){
console.log(idle);
idle = idle + 1;
if (idle > 19 && count >= 0) {
count = count;
app.warning.show({ //This is just a warning message that shows up at the top of the page counting down before the app closes.
message: 'Logging out in <span class="warn">' + count + '</span> seconds.'
});
if(count != null || count >= 0){
count=count-1;
if (count === 0 && count != 'null'){
resetTimer();
app.workflow.resetWorkflow();
}
}
}
}
}
function resetTimer(){
count = resetCount;
idle = 0;
clearInterval(counter);
clearInterval(idleIntervalTimer);
app.warning.close();
}
我尝试了一些不同的东西。一个是我会在顶部设置一个空白变量并使用该空白变量来设置间隔,但这似乎不起作用。我还试图检测间隔是否仍然有效,但我并不想要清除间隔,只是不要创建另一个间隔。一些帮助会非常学徒!
答案 0 :(得分:2)
我假设每次翻页都会调用代码。不要立即设置间隔计时器。您应该创建一个首先清除它然后设置的函数。
例如,请执行此操作:
var idleIntervalTimer;
function initIdleIntervalTimer(){
clearInterval(idleIntervalTimer);
idleIntervalTimer = setInterval(timerIncrement, 1000);
}
initIdleIntervalTimer();
或尝试将计时器切换到全局范围,摆脱var idleIntervalTimer并执行此操作:
clearInterval(window.idleIntervalTimer);
window.idleIntervalTimer = setInterval(timerIncrement, 1000);
答案 1 :(得分:0)
这有点难看,但是
window.clearInterval(localStorage['idleInterval'])
var idleIntervalTimer = setInterval(timerIncrement, 1000); //This is what keeps being called
window.localStorage['idleInterval'] = idleIntervalTimer;
编辑:如果你不想清除,请将整个init包装在一个标志中,例如
if (!window._intervalInitOccured){
window._intervalInitOccured = true;
//continue init