Javascript:SetTimeout 和 ClearTimeout 重置。

标签 javascript asp.net settimeout cleartimeout

我有以下 session 时间 javascript 代码

    <script type="text/javascript">

    var time;
    var sessionTimeout = <%= Session.Timeout %>

    function DisplaySessionTimeout() {

       document.getElementById("<%= lblSessionTime.ClientID %>").innerText = sessionTimeout;
        sessionTimeout = sessionTimeout - 1;

        if (sessionTimeout >= 0)
            time = window.setTimeout("DisplaySessionTimeout()", 1000);
        else {
            alert("Your current Session is over.");
        }
   }

    function cleartime() {
        clearTimeout(time);
        document.onmousemove = cleartime;
        document.onkeypress = cleartime;
    }
</script>   

它可以倒计时。但是当我移动鼠标或按下按键时没有任何反应。我希望它在 mousemove 和 keypress 上重置计数器。谁能发现错误?

最佳答案

如果您打算将计时器重置为其初始值,那么您就大错特错了。我还建议为此使用 setInterval 而不是 setTimeout (并向它传递函数而不是字符串):

var time,
    sessionTimeout = <%= Session.Timeout %>,
    remainingTime = sessionTimeout,
    intervalHandle,
    lastPos = [0, 0];

function displaySessionTimeout() {
   document.getElementById("<%= lblSessionTime.ClientID %>").innerText = remainingTime;
}

function updateTimer() {
    remainingTime -= 1;

    if (remainingTime >= 0) {
        displaySessionTimeout();
    } else {
        clearInterval(intervalHandle);
        alert("Your current Session is over.");
    }
}

function resetTimer() {
    if (remainingTime >= 0 && (e.clientX !== lastPos[0] || e.clientY !== lastPos[1])) {
       lastPos = [e.clientX, e.clientY];
       remainingTime = sessionTimeout;
       displaySessionTimeout();
    }
}

intervalHandle = setInterval(updateTimer, 1000);
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;
displaySessionTimeout();

http://jsfiddle.net/2ZERB/

关于Javascript:SetTimeout 和 ClearTimeout 重置。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732909/

相关文章:

javascript - div 单击时多个选择会发生变化

javascript - 是否需要使用 load() 两次将同一文件附加到两个不同的元素

javascript - 防止递归函数运行 setTimeout 复合

javascript - 一个 Observable,多个订阅者,不同的情况,使用 rxjs5 的不同 share() 行为

javascript - 使用 JavaScript 将数组和文件对象提交到 Rails 后端

c# - 检查每个页面的登录

c# - 对 ASP.NET MVC4 中的 return View() 方法感到困惑

回发后页面加载时未调用 javascript 函数

Javascript setTimeout 问题 w/for 循环

javascript - 使用 Javascript 打开一个新页面并在那里填充表单值