1

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

提前致谢。

4

2 回答 2

2

Firstly, don't use strings in the setTimeout function. Prefer the following:

setTimeout(saveAndLogOut, time)

Secondly, as @David said, your setTimeout is not called when you display the logoutTimer variable in the init() function. It looks like you want the following:

var logoutTimer = function() { setTimeout( saveAndLogOut, 1000 * 60 * 1.5 ) }

// Then, in your init function:
logoutTimer()
于 2012-04-16T10:31:19.540 回答
2

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

你打算设置计时器init()吗?它目前只是logoutTimer;在那里说,实际上并没有做任何事情。如果您希望此时重新设置计时器,则需要将整个setTimeout命令包含在init.

于 2012-04-16T10:26:21.127 回答