我们网站上有一个表单,用户可以在其中填写和提交。有时,他们填写表格的时间要比我们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);
}


提前致谢。

最佳答案

在粘贴的第一行代码中,logoutTimer仅设置一次。如果用户单击“保存并继续”,将清除logoutTimer。绝不会再将其设置为任何东西。

您是否打算在init()中设置计时器?当前它只是在其中说logoutTimer;,实际上什么也没做。如果您希望此时重新设置计时器,则需要在setTimeout中包括整个init命令。

07-25 23:18