2012-07-12 126 views
0

我想用Javascript設置會話超時,看起來像警報阻止計時器開始。這裏是我的代碼:JavaScript瀏覽器超時秒計時器

var first_timer = 2 * 1000; 
var second_timer = 8 * 1000; 
var down = -1; 

function initTimer() { 
    down = setTimeout(processTimeout, first_timer) 
} 

function processTimeout() { 
     down = setTimeout(logout, second_timer); 
     alert ("Timeout of first timer, timerid:" + down); 
} 

function logout() { 
    alert("You are logged out"); 
    window.location = "http://www.google.com" 
} 

function clearTimer() { 
    if (-1 != down) 
    clearTimeout(down); 
    alert("Restarting timer"); 
    initTimer(); 
} 

initTimer(); 

當我運行上面的,我只看到了第一個警報被駁回後,啓動第二定時器。如何確保在第一次超時後立即啓動第二個計時器,即使該提醒未被解除?

THX

回答

1

alert()功能塊一切,直到它被駁回。您可以使用稱爲模式對話框的功能創建您自己的不會阻止的警報樣式消息。

jQuery UI的具有this feature.

+0

謝謝。不幸的是,我正在尋找一個彈出窗口,在顯示背景內容的同時模擬原生移動行爲。我試過jquerymobile對話框,但它似乎佔據了整個屏幕..任何想法? – Kiran 2012-07-13 14:37:33

1

這很可能取決於你使用的瀏覽器。我沒有遇到你用最新的Firefox描述的問題。

但是,第二個計時器警報框仍然會顯示,直到第一個關閉。

這是因爲JavaScript解釋器是而不是多線程。但是JavaScript本身是非常異步的,特別是在延時請求中,例如定時器,AJAX和動畫。這有時會讓人感覺多線程。

確實,在您的代碼示例中,第二個計時器按預期啓動。當我解散第一個對話框時,假設在出現10秒後立即顯示第二個對話框。 儘管如此,它可能是你的問題,它將永遠不會顯示之前你關閉第一個警報,因爲警報是同步呼叫。所以主事件循環直到被解散後纔會得到控制權。

這種情況的解決方法是使用「HTML」對話框,例如Jquery-UI提供的對話框。