为什么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函数? 当我尝试运行空jsfiddle时,只加载了jQuery并使用我的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)
,我遇到了同样的问题,这是一个可行的解决方案。