Javascript .beforeunload仅处理刷新

Javascript .beforeunload仅处理刷新,javascript,jquery,onbeforeunload,Javascript,Jquery,Onbeforeunload,如果有任何未保存的信息,我会在用户进入应用程序的另一个页面之前提醒他们。我正在按照的建议使用.beforeunload 但它只有在我刷新页面时才起作用,而在我单击指向站点上另一个页面的链接时则不起作用。我是否误解了如何在卸载前使用,或者我需要另一个事件侦听器 application.js //= require forms.js forms.js $(window).on('beforeunload', function () { console.log('unloading') })

如果有任何未保存的信息,我会在用户进入应用程序的另一个页面之前提醒他们。我正在按照的建议使用
.beforeunload
但它只有在我刷新页面时才起作用,而在我单击指向站点上另一个页面的链接时则不起作用。我是否误解了如何在卸载前使用,或者我需要另一个事件侦听器

application.js

//= require forms.js
forms.js

$(window).on('beforeunload', function () {
    console.log('unloading')
});

beforeunload
事件的工作原理如下:

    // Fires just before leaving/refreshing the page.  Handler will
    // be passed the event object and if a returnValue is set on the 
    // event, the browser will display a confirmation dialog with the
    // returnValue message displayed.
    window.addEventListener("beforeunload", function (evt) {
      evt.returnValue = "Setting this to anything but an empty string, causes this to work!";
    }, false);

例如,请参阅。

当您单击链接转到另一个站点/页面时,它应该会触发。@epascarello当您转到该站点的另一个页面时,它不会触发。你有没有想过为什么?你有这样的想法,当页面导航发生时,你会保留日志?我们现在使用的是什么浏览器?@epascarello我目前使用的是chrome。很可能当你转到网站的另一个页面时,你实际上并没有转到另一个页面。您必须将此功能与通过自定义对话框处理“页面更改”的任何内容联系起来。@epascarello她没有在事件对象上设置
returnValue
。正如我的评论所指出的。它应该可以像OP那样正常工作,您可以在不使用returnValue的情况下触发内部内容。@epascarello Not true:当为returnValue事件属性分配字符串时,会出现一个对话框,要求用户确认离开页面(参见下面的示例)。如果没有提供值,事件将以静默方式处理。我可以读到:如果没有提供值,事件将以静默方式处理。“这意味着它在没有对话框的情况下运行。这并不意味着跳过其中的代码。@gwalshington请参阅此示例。