重定向不活动

时间:2016-11-26 09:02:48

标签: javascript jquery ruby-on-rails

我的目标是只要他/她在某段时间内不断点击按钮,就会将用户留在视图中。

我正在使用Rails,并在相关视图中通过嵌入式JS探索解决方案。

到目前为止,我可以设置一个时间,之后用户将使用以下脚本重定向到根路径:

var delayedRedirect = function (){
  window.location = "/";
}

var delay = 10000;

$(document).ready(function() {
  setTimeout('delayedRedirect()', delay);
});

我一直在尝试编写一个函数来重置'delay'的值,再次调用setTimeoutFunction。

$('#btn-persist').click(function() {
  delay = 3000; 
 // or calling again setTimeout('delayedRedirect()', delay);
});

但我注意到更改变量不会影响已调用的setTimeout函数。

我还尝试使用clearTimeout函数,如下所示

var delayedRedirect = function (){
  window.location = "/persists";
}

var delay = 3000;

var triggerRedirect = function() { setTimeout('delayedRedirect()', delay); 
}

var stopRedirect = function (){
  clearTimeout(triggerRedirect);
}

$(document).ready(function() {
  triggerRedirect();

  $('#btn-persist').click(function() {
    stopRedirect();
  });
});

我想知道为什么这可能不起作用,如果有任何其他方法可以停止已经调用的setTimeout函数的执行,那么我可以再次调用它以有效地将时间重置为'delay'的原始值。

同时,我不想停止任何其他并行运行的JS函数。

您是否看到了更好的解决方案来实现这一目标?

1 个答案:

答案 0 :(得分:0)

clearTimeout无法正常工作的主要问题。因为您正在清除匿名函数而不是setTimeout变量

更改此

var triggerRedirect = function() { setTimeout('delayedRedirect()', delay); 
}

到这个

var triggerRedirect = setTimeout('delayedRedirect()', delay);

编辑: 也改变这个(如果你想重启非活动的重定向触发器)

$('#btn-persist').click(function() {
    stopRedirect();
  });

到这个

$('#btn-persist').click(function() {
        stopRedirect();
        triggerRedirect();
      });