繁体   English   中英

使用clearTimeout后,setTimeout不起作用

[英]setTimeout doesn't work after using clearTimeout

我们在我们的网站上有一个表格,用户可以填写并提交。 有时,他们需要更长的时间来填写表格,而不是20分钟的会话超时。

因此,我编写了在超时前2分钟弹出消息的功能,以警告用户,并选择保存并继续(更新会话)。 如果留下警告,它将自动保存他们的工作并在2分钟后将其注销。

如果忽略该消息,它将自动保存工作并将其记录下来。 如果他们单击“保存”并继续保存正常,则消息会在再过20分钟后重新弹出(测试时我会减少时间),但是,随后的时间, 如果是2分钟则不再将其记录下来忽略。

这是我写的JavaScript。 谁能看到任何问题?

init(); <body>标记中调用onLoad

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; 在那里,它没有真正做任何事情。 如果您希望在此时重置计时器,则需要在init包含整个setTimeout命令。

首先,不要在setTimeout函数中使用字符串。 喜欢以下内容:

setTimeout(saveAndLogOut, time)

其次,正如@David所说,当你在init()函数中显示logoutTimer变量时,不会调用你的setTimeout。 看起来你想要以下内容:

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

// Then, in your init function:
logoutTimer()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM