gpt4 book ai didi

javascript clearTimeout 不清除超时!..这应该不难吧?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:05 25 4
gpt4 key购买 nike

我正在使用 setTimeout 和 clearTimeout 进行自动注销。应该非常简单,但清除超时似乎并没有停止超时,并且无论如何都会调用该函数。我设置了 session 变量填充一个文本输入,然后 javascript 读取该文本输入并将其与现在的时间进行比较。如果差异大于或等于 20 秒,则覆盖 div 会显示提供更新 session 的选项,否则它将在 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>

最后一个事件变量是从由 session 变量填充的文本输入中提取的。这一点似乎有效,因为当您单击更新按钮时,输入的值会更改并且控制台输出显示自上次事件以来的时间已被重置。

我希望这是有道理的。请要求澄清,但我真的被这个问题难住了!

谢谢!

最佳答案

你有两个t

var t = 0;

这个在外部范围内。

var t = setTimeout("logout();", 10000);

这个在内部范围内。

clearTimeout(t);

这是阅读外部范围的内容。

从内部作用域中移除 var

关于javascript clearTimeout 不清除超时!..这应该不难吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com