Javascript:SetTimeout和ClearTimeout重置。

Javascript:SetTimeout和ClearTimeout重置。,javascript,asp.net,settimeout,cleartimeout,Javascript,Asp.net,Settimeout,Cleartimeout,我有以下会话时javascript代码 <script type="text/javascript"> var time; var sessionTimeout = <%= Session.Timeout %> function DisplaySessionTimeout() { document.getElementById("<%= lblSessionTime.ClientID %>").innerTe

我有以下会话时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>   

var时间;
var sessionTimeout=
函数DisplaySessionTimeout(){
document.getElementById(“”).innerText=sessionTimeout;
sessionTimeout=sessionTimeout-1;
如果(会话超时>=0)
time=window.setTimeout(“DisplaySessionTimeout()”,1000);
否则{
警报(“您当前的会话已结束。”);
}
}
函数cleartime(){
clearTimeout(时间);
document.onmousemove=cleartime;
document.onkeypress=清除时间;
}

它能倒计时。但当我移动鼠标或按下按键时,什么也没发生。我想让它重置鼠标移动和按键上的计数器。有人能发现错误吗?

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

var时间,
sessionTimeout=,
剩余时间=会话超时,
间隔手柄,
lastPos=[0,0];
函数displaySessionTimeout(){
document.getElementById(“”).innerText=remainingTime;
}
函数updateTimer(){
剩余时间-=1;
如果(剩余时间>=0){
displaySessionTimeout();
}否则{
clearInterval(间隔句柄);
警报(“您当前的会话已结束。”);
}
}
函数resetTimer(){
if(remainingTime>=0&(e.clientX!==lastPos[0]| | e.clientY!==lastPos[1])){
lastPos=[e.clientX,e.clientY];
剩余时间=会话超时;
displaySessionTimeout();
}
}
intervalHandle=setInterval(updateTimer,1000);
document.onmousemove=resetTimer;
document.onkeypress=重置计时器;
displaySessionTimeout();

你意识到你在递归调用cleartime,对吗? 而且,你甚至没有打电话给cleartime。 PS也将取代

window.setTimeout("DisplaySessionTimeout()", 1000);


即使它被调用,
cleartime
也永远不会调用自己。你是从哪里得到“递归”的?我想当我移动鼠标或按下任何键时,cleartime会被自动调用。它会停止计数器,但不会重置计数器。当鼠标移动时,我想让它重新开始,你没有在你的问题中解释这一切,但是请查看上面更新的代码。它仍然不工作。当我运行它时,计数器刚好保持在20。不是倒计时。我正在弄清楚clientX和Y做什么。这次倒计时,但onmousemove和onkeypress仍然没有重置计时器。也许这与这些功能有关。
window.setTimeout("DisplaySessionTimeout()", 1000);
setTimeout(DisplaySessionTimeout, 1000);