2011-09-20 140 views
7

我有一個奇怪的問題與jQuery(1.6.x)。我有我的網頁上這個簡單的調用:爲什麼jQuery有時會覆蓋window.onbeforeunload?

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相同。

+0

您可以使用jQuery'unload'方法嗎? http://api.jquery.com/unload/ –

+0

我能夠成功地將自己的函數應用於'onbeforeunload',並使用jQuery 1.6。有沒有更多的信息或代碼可以提供?這不適用於所有瀏覽器嗎? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

你在太空中尖叫。提供重現此問題的測試案例,我們可以提供幫助。 – mekwall

回答

4

好吧,我終於想通的解決方案,這可能不是最乾淨的一個 - 因爲我不知道這個問題的確切原因 - 但它的作品。我已將我的beforeunload函數放入jQuery的加載函數中,以便在DOM和其他元素加載後執行。

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

這$(窗口).bind( 'beforeunload',函數(){回報 '你確定嗎?';});對我來說工作得很好,謝謝 –

0

你可能有一些運氣嘗試一個setTimeout(function(){ ... },0),我遇到了同樣的問題,這個工作是一個可行的解決方案。

相關問題