javascript window.onbeforeunload无法正常工作

时间:2012-11-13 22:58:57

标签: javascript onbeforeunload

更新:我试图让onbeforeunload工作的页面出现问题。我在布局中设置了它,除了那个之外它还会弹出每个页面......所以必须有一些破解的javascript,或者重新定义onbeforeunload的javascript文件。因为它只能定义一次

我正在开发一个Rails项目,我正在设置一个弹出窗口,提醒用户如果他们离开页面而没有保存,他们的数据将会丢失。所以我使用window.onbeforeunload

我通过将此脚本代码添加到视图文件的顶部来将其设置在一个页面上

var saving = false;

window.onbeforeunload = function(){
    if(!saving)
      return 'Are you sure you don\'t want to save before you leave?';
};

如果用户点击“保存”按钮,将“保存”设置为“真”,并将其重定向到单独的页面。

当我尝试在单独的视图文件上设置完全相同的东西时,问题就出现了,这也需要相同的功能。

除非我将上面的代码放到文件中,否则根本没有给出任何弹出窗口....所以我查看了其他可用选项来设置onbeforeunload函数。

所以我现在把它设置为:

var saving = false;

window.onbeforeunload = displayConfirm();

function displayConfirm(){
    if(!saving){
      if(confirm('If you leave without saving, your changes will be lost. Press cancel to go back to save')){
        confirmExit();
      }
    }
}

在第二页上。我的问题是弹出这里与第一个实现不一样。甚至更奇怪,弹出窗口显示在窗口加载...不在窗口卸载之前。

我一直在环顾四周,现在搞乱了几个小时。我开始变得非常恼火,因为这应该是一个简单的补充。看看它是如何在单独的页面上设置的,并且正常工作。任何对可能出错的看法,或者如果我犯了一个愚蠢的错误,都会非常感激。

谢谢,

-Alan

3 个答案:

答案 0 :(得分:1)

尝试

window.onbeforeunload = displayConfirm;

您实际上是在立即调用该函数并将displayConfirm()的返回值赋给window.onbeforeunload。

<强>更新 但是您的onbeforeunload函数中只有一个return语句,请参阅here。所以调用“confirm”或其他一些自定义函数不起作用。

答案 1 :(得分:1)

1)window.onbeforeunload = displayConfirm(); - 您正在触发该功能,而不是分配它

2)onbeforeunload很棒,但它在很多方面都不受支持。有些浏览器甚至没有它,期间(除了最新的Opera之外),所以如果你是为广大的受众做这个,或者你需要100%跨浏览器,{{1}可悲的是,它本身还不够。

答案 2 :(得分:0)

最近我正在使用这个活动开展一个项目,所以我确实在网上做了一些搜索。 使用onbeforeunload事件时,很少需要考虑。

  1. 并非所有浏览器都支持。 Opera,特别是旧版本。 有些支持它,例如按下刷新按钮时不触发。
  2. 使用此事件将导致页面不会被缓存。
  3. 以下是Patrick Hunlock对onbeforeonload事件更全面的文章。