我们的网站上有一个表格,用户可以填写并提交。有时,他们填写表格的时间比我们20分钟的会话超时要长。
因此,我编写了在超时前2分钟弹出消息以警告用户的功能,并提供了保存和继续选项(更新会话)。如果留下警告,它将自动保存他们的工作并在2分钟后将其注销。
如果忽略该消息,它会自动保存工作并将其记录下来。如果他们单击“保存”并继续保存,则会在再过20分钟后再次弹出消息(在测试时我会减少时间),但是,随后的时间,它会在另外2次后再将其记录下来如果它被忽略,则为分钟。
这是我写的JavaScript。任何人都可以看到任何问题吗?
init();
在onLoad
代码中被称为<body>
。
var logoutTimer = setTimeout('saveAndLogOut();', 1000 * 60 * 1.5);
function init() {
setTimeout('expirationWarning();', 1000 * 60 * 1);
logoutTimer;
}
function expirationWarning() {
$('#session-expiry-warning').dialog({
show: 'fade',
hide: 'fade',
title: 'Your session is about to expire...',
buttons: {
"Save and Continue": function() {
ajaxSave('saved');
clearTimeout(logoutTimer);
init();
$(this).dialog("close");
}
},
width: 550,
closeOnEscape: false,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
}
function saveAndLogOut() {
ajaxSave('autosaved');
setTimeout("parent.document.location.href = '../logout.asp';", 5000);
}
提前致谢。
答案 0 :(得分:2)
logoutTimer
仅在您粘贴的第一行代码中设置一次。如果用户点击“保存并继续”,则会清除logoutTimer
。在任何时候它都不会再被设置为任何东西。
您打算在init()
中设置计时器吗?它目前只是在那里说logoutTimer;
,它实际上没有做任何事情。如果您希望此时重置计时器,则需要在setTimeout
中包含整个init
命令。
答案 1 :(得分:2)
首先,不要在setTimeout
函数中使用字符串。喜欢以下内容:
setTimeout(saveAndLogOut, time)
其次,正如@David所说,当您在logoutTimer
函数中显示init()
变量时,不会调用您的setTimeout。看起来你想要以下内容:
var logoutTimer = function() { setTimeout( saveAndLogOut, 1000 * 60 * 1.5 ) }
// Then, in your init function:
logoutTimer()