2012-04-16 8 views
1

私たちのウェブサイトには、ユーザーが記入して提出できるフォームがあります。場合によっては、20分のセッションタイムアウトよりもフォームに記入するのに時間がかかります。clearTimeoutを使用した後にsetTimeoutが機能しない

タイムアウトの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); 
} 

ありがとうございます。

+1

[ 'setTimeout'](https://developer.mozilla.org/en/DOM/window.setTimeout)の代わりに、コードの機能を取ることができます。コード**の使用はお勧めできません**。それを変更することができます。 'var logoutTimer = setTimeout(saveAndLogOut、1000 * 60 * 1.5);'。 https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/eval#Don%27t_use_evalも参照してください。 – Zeta

+0

私はそれを行うことができるか分からなかった。よく見えます。ありがとう。 –

答えて

2

logoutTimerは、貼り付けたコードの最初の行に1回だけ設定されます。ユーザーが[保存して続行]をクリックすると、logoutTimerが消去されます。それが何にも設定されません。

init()にタイマーを設定しましたか?現在は実際には何もしていない、logoutTimer;と表示されています。この時点でタイマーを再設定する場合は、setTimeoutコマンド全体をinitに含める必要があります。

+0

ありがとうございます。私は信じられないほど薄暗くなっていた。それは完璧な意味合いがあります。 –

2

最初に、setTimeout機能で文字列を使用しないでください。以下の優先:@デビッドが言ったようにあなたがinit()機能でlogoutTimer変数を表示するとき

setTimeout(saveAndLogOut, time) 

第二に、あなたのsetTimeoutが呼び出されません。それはあなたが以下の希望のようになります。

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

// Then, in your init function: 
logoutTimer() 
関連する問題