javascript clearTimeout未清除超时!。。这不应该是';这不难吗?
我正在使用setTimeout和clearTimeout进行自动注销。应该是非常直接的,但是清除超时似乎并没有停止超时,并且函数仍然被调用。我设置了session变量填充一个文本输入,然后javascript读取该文本输入并与现在的时间进行比较。如果差异大于或等于20秒,将显示overlay div,提供续订会话的选项,或者它将在10秒后注销。检查最后一个活动的脚本每10秒自动运行一次。显然,一旦我让它工作的时间将更长-这些只是为了测试的目的 我已经在网上搜索过了,但似乎找不到一个明显的解决方案,因为它没有那么复杂,看起来它真的应该可以工作 这是我的密码:javascript clearTimeout未清除超时!。。这不应该是';这不难吗?,javascript,Javascript,我正在使用setTimeout和clearTimeout进行自动注销。应该是非常直接的,但是清除超时似乎并没有停止超时,并且函数仍然被调用。我设置了session变量填充一个文本输入,然后javascript读取该文本输入并与现在的时间进行比较。如果差异大于或等于20秒,将显示overlay div,提供续订会话的选项,或者它将在10秒后注销。检查最后一个活动的脚本每10秒自动运行一次。显然,一旦我让它工作的时间将更长-这些只是为了测试的目的 我已经在网上搜索过了,但似乎找不到一个明显的解决方案
var t = 0;
function check_status(){
var time_now = Math.floor(new Date().getTime() / 1000);
var last_activity = document.getElementById("last_activity").value;
var since_last_activity = time_now-last_activity;
console.info(since_last_activity);
if(since_last_activity >= 20){
// show div
document.getElementById("logout_warning").style.height = document.documentElement.clientHeight+"px";
document.getElementById("logout_warning").style.display = 'block';
// start countdown
var t = setTimeout("logout();", 10000);
}
}
function logout(){
document.getElementById("logout_warning").style.display = 'none';
location.href="/user/logout";
}
function renew(){
clearTimeout(t);
var time_now = Math.floor(new Date().getTime() / 1000);
document.getElementById("last_activity").value = time_now;
document.getElementById("logout_warning").style.display = 'none';
}
setInterval('check_status()', 10000);
然后在身体里
<div id="logout_warning" style="display:none; width:100%; height:500px; top:0px; left:0px; position:absolute; background-image:url('/images/overlay.png'); z-index:100000;">
<div style="width:300px; position:relative; margin:200px auto; border:1px solid #000000; background-color:#FFFFFF; padding:10px; text-align:center;">
You're going to be logged out in 10 seconds! oh no!<br/><br/>
<button type="button" onclick="renew();">Click here</button> to renew your session
</div>
</div>
你将在10秒内注销!哦,不
单击此处续订会话
最后一个活动变量来自由会话变量填充的文本输入。此位似乎起作用,当您单击“续订”按钮时,输入值发生更改,控制台输出显示自上次活动以来的时间已重置
我希望这是有道理的。请要求澄清,但我真的很难办这一点
谢谢 您有两个
t
s
var t = 0;
这一个在外部范围内
var t = setTimeout("logout();", 10000);
clearTimeout(t);
这个在内部范围内
var t = setTimeout("logout();", 10000);
clearTimeout(t);
这是在外部范围内读取的
var t = setTimeout("logout();", 10000);
clearTimeout(t);
从内部作用域上的变量中删除
var
。这是因为您正在重新定义函数中的变量,并且它成为该函数的局部变量,全局t仍然为0:
var t = setTimeout("logout();", 10000);
clearTimeout(t);
var t = setTimeout("logout();", 10000);
删除变量之前的var 您正在用局部变量覆盖全局变量
t
:
var t = 0;
function check_status() {
var t = setTimeout("logout();", 10000);
// ^^^^
}
function renew() {
clearTimeout(t);
}
移除
var
以使t
引用全局变量。不要将eval
uation的字符串传递给setTimeout
,传递函数<代码>设置超时(注销,10000)你这个天才!我知道这是件愚蠢的事!非常感谢!