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

logoutTimer貼り付けたコードの最初の行で、一度だけ設定されます。ユーザーが「保存して続行」をクリックすると、logoutTimerがクリアされます。どの時点でも、それは再び何かに設定されることはありません。

タイマーをセットするつもりでしたinit()か?現在はlogoutTimer;そこに書かれているだけで、実際には何もしません。setTimeoutこの時点でタイマーを再設定する場合は、コマンド全体をに含める必要がありますinit

于 2012-04-16T10:26:21.127 に答える
2

まず、関数で文字列を使用しないでくださいsetTimeout。次のことをお勧めします。

setTimeout(saveAndLogOut, time)

logoutTimer次に、@ Davidが言ったように、関数に変数を表示するときにsetTimeoutは呼び出されませんinit()。次のものが必要なようです。

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

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