2017-05-30 72 views
1

我需要有一種方法做「留」以下:導航到其他頁面時,用戶點擊beforeunload

  1. 當用戶點擊退出窗口,應該問他們是否想留或離開
  2. 如果用戶點擊留下來,應該引導他們到一個新的頁面
  3. 如果用戶點擊離開,窗口應關閉

目前,我有以下代碼:

var timeout; 
$(window).on('beforeunload', function(){ 
    timeout = setTimeout(function() { 
     alert('You stayed'); 
     window.location.href = 'desktop/salvage'; 
    }, 1000); 
    return "You save some unsaved data, Do you want to leave?"; 
}); 

function noTimeout() { 
    alert("You're leaving!"); 
    clearTimeout(timeout); 
} 

window.unload = noTimeout; 

警報運行正常,但是如果用戶單擊停留,則嘗試導航到另一個頁面時會再次運行beforeonload並再次提示您。在您決定離開頁面之前,這會陷入無限循環,如果您選擇「停留」,則會導航到您應該導航到的頁面。

回答

1

使用布爾標誌,以防止警報當你真的希望用戶被重定向到另一個頁面:

var timeout; 
var redirecting = false; 
$(window).on('beforeunload', function(){ 
    if (redirecting) { return; } 
    timeout = setTimeout(function() { 
     alert('You stayed'); 
     redirecting = true; 
     window.location.href = 'desktop/salvage'; 
    }, 1000); 
    return "You save some unsaved data, Do you want to leave?"; 
}); 

function noTimeout() { 
    alert("You're leaving!"); 
    clearTimeout(timeout); 
} 

window.unload = noTimeout; 
+0

這完美地工作,謝謝! – Linx

相關問題