2016-11-26 65 views
0

我的目标是只要用户在特定时间内不断点击某个按钮,就可以将用户保留在视图中。不活跃重定向

我正在使用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函数的执行被调用,所以我可以再次调用它来有效地将时间重置为“延迟”的原始值。

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

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

回答

0

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

这个变化

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

这个

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

编辑: 此外,如果要重新启动无效重定向触发改变这种( )

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

to this

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

当然,谢谢!这就是为什么它不起作用。谢谢 – Andrew