Почему jQuery иногда перезаписывает window.onbeforeunload? - PullRequest
7 голосов
/ 20 сентября 2011

У меня странная проблема с jQuery (1.6.x).У меня есть простой вызов на моей странице:

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

Но он не работает, потому что, как я выяснил, jQuery перезаписывает содержимое окна.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.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

Хорошо, я наконец-то нашел решение, которое, вероятно, не самое чистое - потому что я не знаю точную причину проблемы - но оно работает.Я поместил свою функцию beforeunload в функцию загрузки jQuery, чтобы она выполнялась после загрузки DOM и других элементов.

$(window).load(function () {
  $(window).bind('beforeunload', function() { return 'Are you sure ?';} );
});
0 голосов
/ 11 июля 2012

Возможно, вам повезет, попробовав setTimeout(function(){ ... },0), я столкнулся с той же проблемой, и это сработало как жизнеспособное решение.

...