为什么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的load函数中,以便在加载DOM和其他元素后执行它。

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

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

最新更新