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

我有jQuery(1.6.x)的奇怪问题。 我在我的页面上有这个简单的电话:

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

但它不起作用,因为正如我发现的那样,jQuery会覆盖window.onbeforeunload的内容。 在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加载和我的onbeforeunload函数运行空jsfiddle时,它按预期工作。

任何提示将不胜感激。 提前致谢。

编辑:

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

 $(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) ,我遇到了同样的问题,这是一个可行的解决方案。