0

更新:我试图让 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?';
};

如果用户点击保存按钮,则保存设置为 true,这会将他们重定向到单独的页面。

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

除非我将上面的代码放入文件中,否则根本不会弹出任何内容......在任何时候。因此,我查看了其他可用选项来设置 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();
      }
    }
}

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

几个小时以来,我一直在四处寻找和解决这个问题。我开始变得非常恼火,因为这应该是一个简单的补充。看看它是如何在单独的页面上设置的,并且工作正常。任何关于可能出现问题的见解,或者如果我犯了一个愚蠢的错误,将不胜感激。

谢谢,

-艾伦

4

3 回答 3

1

尝试

window.onbeforeunload = displayConfirm;

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

更新return但是您的 onbeforeunload 函数 中仅限于一个语句,请参见此处。所以调用“确认”或其他一些自定义函数不起作用。

于 2012-11-13T23:02:20.797 回答
1

1) window.onbeforeunload = displayConfirm();-- 你正在触发函数,而不是分配它

2)onbeforeunload很棒,但在很多方面都不受支持。有些浏览器甚至没有它,期间(例如,除了最新的 Opera 之外的所有浏览器),所以如果你是为广大观众做这个,或者你需要它来 100% 跨浏览器工作,onbeforeunload遗憾的是还不够在其自己的。

于 2012-11-13T23:04:15.093 回答
0

Recently i was working on a project using this event, so i did do some search on the net. There are few thing need to be taken into consideration when using the onbeforeunload event.

  1. It is not supported by all browser. Opera, especially older version. Some support it partially, such as not firing when refresh button is pressed.
  2. Using this event will cause the page will not be cached.

Here is an article that is more thorough about the onbeforeonload event by Patrick Hunlock.

于 2013-04-27T09:51:42.687 回答