Javascript 防止用户意外导航到未保存的页面

Javascript 防止用户意外导航到未保存的页面,javascript,jquery,html,pjax,Javascript,Jquery,Html,Pjax,我从SO post获得了下面的代码片段,当用户尝试重新加载页面或关闭浏览器等时,它会起作用。但是,如果用户单击链接,它会让他们迷失方向,然后错误地开始在错误的页面上显示消息。我正在使用pjax进行链接 $(document).ready(function () { $('textarea').change(function () { window.onbeforeunload = function () { return "Your changes to

我从SO post获得了下面的代码片段,当用户尝试重新加载页面或关闭浏览器等时,它会起作用。但是,如果用户单击链接,它会让他们迷失方向,然后错误地开始在错误的页面上显示消息。我正在使用pjax进行链接

   $(document).ready(function () {
       $('textarea').change(function () {
          window.onbeforeunload = function () { return "Your changes to the survey have not been saved?" };
      });
    });

像下面这样的东西怎么样?
收听所有

您应该在卸载之前使用
on
,如以下所示:

<script type="text/javascript">
saved=true; // initially, it is saved (no action has been done)

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (!saved) {
        return "You did not save, do you want to do it now?";
    }
}
</script>
然后,如果在ajax中保存数据,则“保存”按钮可以将其设置回true:

$('#btnSave').click(function(){
    // ajax save
    saved=true;
});

否则,它将加载下一个页面,并启用
保存
标志。

该页面从未真正获得状态
卸载
,因此您需要在单击链接时触发该状态。您可以提供代码示例吗?@lee code sample来触发特定事件?像这样的“代码示例”有上千种,请尝试搜索,您应该会找到它…创建一个调用
窗口的函数。onbeforeunload
,并将其绑定到您的链接。@您假设我阅读了putvande的答案,并且具备必要的背景知识,可以将其解释为“我需要触发特定事件”,当我解释为“嗯,什么?”时,这看起来是合法的,但我仍在等待,看看是否有“内置”解决方案,然后再将其标记为答案。不确定是否有内置内容(或者你的意思是什么)。尽管如此,请参见更新触发卸载事件的含义。它确实-添加了JSFIDDLE。显然,您的解决方案确实有效,但出于某些原因,我不这么认为:(如果你设法把它放到JSFIDLE中,我相信我们会发现他使用的是OnBeforeLoad,他说当你点击链接时,OnBeforeLoad不是called@mara-mfa我刚刚注意到,谢谢。我更新了说明为什么它不起作用。@Frederik.L当我单击链接时,onbeforeunload仍然没有被调用onbeforeunload这里是onbeforeunload d定义?
<script type="text/javascript">
saved=true; // initially, it is saved (no action has been done)

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (!saved) {
        return "You did not save, do you want to do it now?";
    }
}
</script>
$('textarea').keyup(function(){
    saved=false;
});
$('#btnSave').click(function(){
    // ajax save
    saved=true;
});