我的目标是只要他/她在某段时间内不断点击按钮,就会将用户留在视图中。
我正在使用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函数。
您是否看到了更好的解决方案来实现这一目标?
答案 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();
});