[英]Javascript: SetTimeout and ClearTimeout reset.
我有以下会话时间的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();
你确实意识到你是在递归地召唤cleartime,对吧? 此外,你甚至没有打电话给cleartime。 PS也取代了
window.setTimeout("DisplaySessionTimeout()", 1000);
同
setTimeout(DisplaySessionTimeout, 1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.