2016-09-28 123 views
0

我試圖實現一個彈出式(bootstrap模式樣式),當web訪問者離開我的網站時會觸發。刪除eventlistener for beforeunload

我嘗試不同的選擇:

$(window).bind('beforeunload', function(){ 
$("#sModal").modal('show'); 
return 'Take our survey before you leave.'; 
}); 

但是,它並沒有在FF,而工作在IE瀏覽器工作正常。我還遇到另一個問題,就是在整個頁面被加載時,所有瀏覽器類型的「你想離開還是停留」警告顯示在我的網站本身上的任何鏈接上。

我解決此得到通過我的所有錨標籤循環並增加了點擊監聽,使用去除beforeunload聽衆:

window.onload = function() { 
    var allLinks = document.getElementsByTagName('a'); 
    for (var i = 0; i < allLinks.length; i++) { 
     allLinks[i].addEventListener("click", removeBeforeUnload, false); 
    } 
}; 

的removeBeforeUnload功能只是用

$(window).unbind('beforeunload'); 

再回到實際上使popoup/modal出現在所有瀏覽器上,我在文檔完成加載之後使用了此計算器答案中的代碼:

window.onbeforeunload and window.onunload is not working in Firefox , Safari , Opera?

此解決方案在所有瀏覽器中都很好用,但是現在我無法在本地點擊鏈接上解除此事件!我什麼都試過

window.removeEventlistener('beforeunload',null,false); 
window.removeEventlistener('onbeforeunload',null,false); 
window.removeBeforeUnload(); 
window.onbeforeunload = null; 

我希望你能指出我在正確的方向,並解釋爲什麼我不能拆散這種情況下,我從計算器answer.Thanks使用!

+0

雖然我恨你使用unload事件模式多,這是一個很好的問題因爲我遇到了同樣的問題,試圖在瀏覽器上捕獲關閉事件而不捕獲刷新,回來等。 –

+0

@SterlingArcher謝謝!我希望我能解決這個問題,因爲我處在桌子舞臺上的砰砰聲!我不知道爲什麼事件聽衆沒有被註銷!? – mmokh

+0

我會建議堅持使用jQuery風格的'bind/unbind'(實際上這些應該是jQuery的更新版本中的'on/off'),或純DOM風格的'addEventListener/removeEventListener'語義。結合兩個導致瘋狂:)。 –

回答

0

一個想法是使用全局變量標誌,並且在標誌不真實時不在卸載事件處理程序中執行任何操作。設置該標誌爲空或虛假的鏈接點擊處理

那麼你並不真的需要刪除監聽

var doUnload = true; 

$('a').click(function(){ 
    doUnload = false; 
}); 

function unloadhandler(){ 
    if(doUnload){ 
     // show modal , return message etc 
    }else{ 
     // do nothing , don't return anything 
    }  
} 
+0

該解決方案在IE內部網站鏈接已經過清理並且彈出窗口僅顯示退出/關閉時非常適用,但是在FF中,內部鏈接已經過清理,但在退出/關閉「您想離開本網站」警報時是否停止顯示所有在一起......彈出窗口只顯示毫秒之前重定向或關閉... – mmokh

+0

什麼是內部鏈接消毒意味着什麼? – charlietfl

+0

這意味着,他們不會觸發彈出窗口,當點擊內部網站鏈接 – mmokh