2014-09-01 102 views
0

我想在用户导航到另一页面时显示确认消息。Javascript-保持当前页面不工作

但是我面临一个问题,如果用户选择“保持当前页面”,浏览器正在将用户带到另一个页面。

请参阅下面的代码。

var onBeforeUnloadFired = false; 

    window.onbeforeunload = function(){ 
    if ($("#aspnetForm").serialize() != form_original_data){ 
     if(!onBeforeUnloadFired){ 
      onBeforeUnloadFired = true; 
      event.returnValue = "No changes have been saved. Are you sure you wish to cancel?";    
     } 
     window.setTimeout("ResetOnBeforeUnloadFired()", 0); 
    } 
}; 

function ResetOnBeforeUnloadFired() { 
    onBeforeUnloadFired = false; 
} 

感谢

+0

对于初学者来说,你的setTimeout方法有不好的语法。我建议把它包装在一个函数中,例如window.setTimeout(function(){...},0)。但是可能还有其他问题 – ne1410s 2014-09-01 16:21:26

回答

0

不知道这个变量的上升和下降。我会这样做:

window.onbeforeunload = function(){ 
    if ($("#aspnetForm").serialize() != form_original_data){   
     return "No changes have been saved. Are you sure you wish to cancel?;"     
    } 
} 
+0

如果我不使用这些变量,那么onbeforeunload方法会被调用两次。 – Vin05 2014-09-01 16:26:18

0

您使用哪种浏览器?如果不是IE使用

$(window).on('beforeunload', function() { 

}); 
+0

我在IE和Chrome中遇到问题。 – Vin05 2014-09-01 16:26:59

+0

然后你有语义错误。当用户选择保留在当前页面上时,您的代码在做什么? – PashaB 2014-09-01 16:34:20

0

我有这个问题,我发现这是与此相关的问题:

onbeforeunload Message Appears Twice (Internet Explorer)

基本上使用setTimeout的局部变量伎俩暂时禁用该处理器

的掩蔽在我的代码中使用window.location =“some url”的根本问题,而不是window.location.href =“某个位置”。

有一次,我改变了

window.location = "..." 

window.location.href = "..." 

了 “留在当前页面上的” 不工作的问题消失了。

相关问题