如何为单页面应用程序实现onDave的isDirty标志?

时间:2012-05-18 15:26:44

标签: javascript asp.net-mvc asp.net-mvc-4 singlepage

我有一个用MVC4编写的单页面应用程序,它使用pjax()将html推送到我页面中的各种s中。我有一个子表单允许用户编辑数据,如果用户更改数据,则在javascript中设置isDirty标志,以触发页面底部有未保存更新的警报。当用户试图不保存而离开页面时,我还想实施一个额外的警告。如果我使用像这样的传统onbeforeunload函数

window.onbeforeunload = function() {
    if (isDirty) {
        return 'You have unsaved changes!';
    }
    return null;
};

如果我尝试关闭页面或完全离开网站,它会调用警报但是如果用户点击我的某个链接重新填充了一些不同的信息,那么它不会触发,因为您实际上并未离开这页纸。我如何构建它以便其中一个pjax()链接引起类似于关闭页面的警报?

2 个答案:

答案 0 :(得分:2)

您可以订阅在pjax请求之前触发的全局事件:

$(document).on('pjax:beforeSend', function() { 
    if (isDirty) {
        return confirm('You have unsaved changes! Are you sure you want to continue?');
    }
    return true;
});

答案 1 :(得分:0)

您可以在页面中的链接上添加委托事件处理程序。您只需确保处理程序绑定到可能加载“新页面”的链接。