2014-09-02 62 views
0

当我点击手机浏览器的后退按钮,它应该像移动浏览器的后退按钮事件处理

确认对话框“你想离开这个页面”

如果用户点击“ OK“我需要触发一些功能。

它工作正常。但是当我点击“取消”它不会停留在同一页面上。我尝试了下面的代码。但我无法成功。

var unloadEvent = function (e) { 
    var confirmationMessage = "Are you want to leave this page"; 
    (e || window.event).returnValue = confirmationMessage; 
    if(confirm(confirmationMessage)) { 
     //some JS function 
    } else { 
     return false; 
    } 
}; 
window.addEventListener("beforeunload", unloadEvent); 

请帮我解决这个问题。 感谢

+0

可能重复的[浏览器后退按钮处理](http://stackoverflow.com/questions/14543245/browser-back-button-handling) – 2014-09-02 05:22:05

+0

我试过了你的代码。但没有运气。你能为此提出一些其他解决方案吗? – 2014-09-02 05:41:07

+0

http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript – 2014-09-02 05:42:55

回答

0

您不能修改默认的对话onbeforeunload,所以你最好的选择可能是与它合作。

window.onbeforeunload = function() { 
    //Do some other stuff here.. 
    return 'You have unsaved changes!'; 
} 

Here's a reference这从微软:

当一个字符串分配给window.event的returnValue属性,将出现一个对话框,让用户能够停留在当前页面上,并保留选项分配给它的字符串。出现在对话框中的默认语句“您确定要离开此页面?”按“OK”继续,或者“取消”保留在当前页面上。“,不能删除或更改。

这个问题似乎是:

  1. onbeforeunload被调用时,它会采取的处理程序的返回值window.event.returnValue
  2. 然后它会将返回值解析为一个字符串(除非它为空)。
  3. 由于false被解析为一个字符串,对话框将会触发,然后会通过一个合适的true/false

结果是,似乎没有被分配到falseonbeforeunload以防止其默认对话的方式。

jQuery的其他注意事项:

  • jQuery中设置该事件可能是有问题的,因为它允许其他onbeforeunload事件的发生为好。如果你只希望你的卸载事件发生,我会坚持使用普通的'JavaScript'。
  • jQuery没有onbeforeunload的快捷方式,因此您必须使用通用的bind语法。

    $(window).bind('beforeunload', function() {}); 
    

此答案由Owen建议在question: override onbeforeunload 感谢欧文。