2017-05-30 74 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

相关问题