为什么jQuery有时会覆盖window.onbeforeunload?

为什么jQuery有时会覆盖window.onbeforeunload?,jquery,jquery-events,onbeforeunload,Jquery,Jquery Events,Onbeforeunload,我对jQuery(1.6.x)有一个奇怪的问题。我的页面上有一个简单的调用: window.onbeforeunload = function() { return 'Are you sure ?'; }; 但它不起作用,因为正如我发现的,jQuery覆盖了窗口的内容。在JS控制台中,我可以看到window.onbeforeunload包含一段jQuery代码: function( e ) { // Discard the second event of a jQuery.event.trig

我对jQuery(1.6.x)有一个奇怪的问题。我的页面上有一个简单的调用:

window.onbeforeunload = function() { return 'Are you sure ?'; };
但它不起作用,因为正如我发现的,jQuery覆盖了
窗口的内容。在JS控制台中,我可以看到
window.onbeforeunload
包含一段jQuery代码:

function( e ) {
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
    jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined;
};
有没有一种方法可以让我找到jQuery为什么以及在哪里覆盖我的
onbeforeunload
函数?当我尝试在仅加载jQuery的情况下运行空JSFIDLE,并使用我的
onbeforeunload
函数时,它会按预期工作

如有任何提示,将不胜感激

编辑:

以防万一,有人建议使用:

$(window).bind('beforeunload', function() { return 'Are you sure';} );

我已经尝试过了,它的行为与使用纯Javascript的方式相同。

好的,我终于想出了一个解决方案,它可能不是最干净的解决方案——因为我不知道问题的确切原因——但它是有效的。我将beforeunload函数放入jQuery的加载函数中,以便在加载DOM和其他元素后执行

$(window).load(function () {
  $(window).bind('beforeunload', function() { return 'Are you sure ?';} );
});

您可能有幸尝试了一个
setTimeout(function(){…},0)
,我遇到了同样的问题,这是一个可行的解决方案。

您可以改用jQuery
unload
方法吗?我能够成功地将自己的函数应用于
onbeforeuload
,并使用jQuery 1.6。您是否可以提供更多信息或代码?这不适用于所有浏览器吗?你在太空中尖叫。提供一个重现这个问题的测试用例,我们可以提供帮助。这是一个相当大的内联网webapp,我几乎不可能公开展示它。因此,我只是在寻找提示,我应该检查什么,或者我应该如何禁用这个jQuery行为……这不是一个完整的答案,但我只是发现在我使用.prepend()将一些元素附加到文档之后,就会发生这种情况。当我使用.remove()删除它们时,onbeforeunload再次起作用。我想知道在加载后添加内容时,jquery是否会以某种方式更改窗口对象。在任何情况下,这里选择的解决方案都非常有效。this$(window).bind('beforeunload',function(){return'确定吗?';});对我来说很好谢谢