2014-03-29 49 views
3

我有這樣的下一屆會議時間的javascript代碼Javascript:SetTimeout和ClearTimeout重置。

<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上重置計數器。任何人都可以發現錯誤?

回答

3

如果您的意圖是將計時器重置爲其初始值,那麼您就會發現所有錯誤。我還建議使用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/

+0

那麼它做什麼替代

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

,它只是停止計數,但它不會復位。我希望它在鼠標移動時再次啓動 – user3346509

+0

好的,您沒有在您的問題中解釋過所有問題,但請參閱上面的更新代碼。 – JLRishe

+0

它仍然無法正常工作。當我運行它時,櫃檯只停留在20點。不倒計時。 – user3346509

2

你一定要明白你是遞歸調用cleartime,對不對? 另外,你甚至不打電話給你。 PS也與

setTimeout(DisplaySessionTimeout, 1000); 
+0

即使被調用,「cleartime」也永遠不會自稱。你從哪裏得到「遞歸」? – cHao

+0

我認爲當我移動鼠標或按任何鍵時自動調用cleartime – user3346509