window.onbeforeunload没有开火

时间:2012-04-22 09:03:21

标签: javascript

我创建了一个相当ajax-heavy的网络应用程序,我正在使用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;
  };
});

P.S。即使我从回调中完全删除了检查并且总是返回一个字符串,它应该每次都提示一条消息,但它仍然不会触发。我已经检查过我的浏览器是否正常处理了带有绑定回调的简单页面的事件。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

可能的原因是使用jQuery UI的自动完成功能。从1.8.17开始的版本设置unbeforeunload,这会禁用现有的处理程序。

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

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