2

我创建了一个相当重 ajax 的网络应用程序,我正在使用该window.onbeforeunload事件来检测用户是否有未保存的更改并阻止她离开页面。该代码由我的 init 函数加载,它曾经在支持该事件的所有浏览器上工作。然而,突然 onbeforeunload 事件无缘无故地停止在每个浏览器上触发。我正在使用 jquery 1.7.1,并且有很多事件附加到各种元素(通过委托或直接)。有谁知道这里可能是什么问题?这是一个代码片段:

$(document).ready( function() {
  window.onbeforeunload = function(e) {
    if($(window).data("confirm") > 0)
        return "You have unsaved changes";
    else
        return null;
  };
});

ps 即使我从回调中完全删除了检查并始终返回一个字符串,它应该每次都提示一条消息,它仍然不会触发。我已经检查了我的浏览器是否可以通过绑定回调的简单页面正确处理该事件。

4

2 回答 2

2
<script>
window.onbeforeunload = function (e) {
    e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'Any string';
    }

    // For Safari
    return 'Any string';
};
</script>
于 2012-04-22T09:12:17.750 回答
2

造成这种情况的一个可能原因是使用了 jQuery UI 的自动完成功能。从 1.8.17 开始的版本 set unbeforeunload,它禁用现有的处理程序。

http://bugs.jquery.com/ticket/12061声称该错误已得到修复,但在我的测试中它仍在 jQuery UI 1.9.2 中。

http://bugs.jqueryui.com/ticket/8439提供了一种可能的解决方法。

于 2012-11-26T08:09:45.343 回答