更改页面时,SetInterval会保持设置

时间:2015-04-09 17:34:46

标签: javascript

所以,我有一个可能与时间一样古老的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();
}

我尝试了一些不同的东西。一个是我会在顶部设置一个空白变量并使用该空白变量来设置间隔,但这似乎不起作用。我还试图检测间隔是否仍然有效,但我并不想要清除间隔,只是不要创建另一个间隔。一些帮助会非常学徒!

2 个答案:

答案 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