2011-04-09 38 views

回答

13

你不能。頁面刷新就像瀏覽和卸載DOM,因此總是會調用onbeforeunload事件。

+0

謝謝,我們可以通過設置標記使其發生,如果是的話我怎麼能確定頁面正在按F5刷新? – mymotherland 2011-04-09 16:50:37

+0

@Dinesh,我的答案的重點是,這是無法完成的,因爲您無法區分按F5的用戶和點擊鏈接以導航離開的用戶。 – 2011-04-09 16:52:03

+0

好的達林,再次感謝 – mymotherland 2011-04-09 16:52:55

4

對於您正在查找的內容,控制刷新網頁的最佳方法是使用onKeyDown函數。不幸的是,直接從瀏覽器中按下刷新按鈕將再次加載DOM,因此技術上無法阻止刷新此操作。

進入相同的問題,我發現這個網頁http://asquare.net/javascript/tests/KeyCode.html在哪裏你可以驗證你的瀏覽器對鍵盤事件的響應。在這裏你可以開始搞清楚爲什麼onKeyDown是最好的選擇。 Chrome瀏覽器不會對onKeyPress功能做出反應。

您只需要一個變量來控制刷新操作。如果用戶按下該鍵,則不會執行onBeforeUnload操作。

var refresh = false; //Control variable to control refresh access 
j$(window).bind('beforeunload', function(){ 
    if (refresh == false) { // If F5 is not pressed 
     return "Do you really want to leave?"; 
    } 
}); 
j$(window).keydown(function(event) { 
    if (event.keyCode == 116) { // User presses F5 to refresh 
    refresh = true; 
    } 
}); 
+0

在Chrome中爲我工作。好的部分解決方案 – 2014-10-29 15:45:47

+0

在我的情況event.keyCode顯示未定義。 – 2015-05-26 07:40:24

1

,需要考慮兩件事情。 (1)釋放f5鍵(onkeyup)時執行「window.onbeforeunload」函數。任何修改對話外觀的東西都必須在onkeydown之前出現。 (2)如果返回後跟一個空值,該函數將不起作用。

如果設置全局變量作爲返回值,並且在按f5鍵時使其爲空,則在使用f5刷新時不會出現對話框。不過,如果按下「關閉」按鈕,它會出現。請注意,即使返回值爲null,「onbeforeunload」中的代碼也會運行,因此如果您希望代碼也被禁用,則必須檢查返回值。

document.onkeydown = KeyCheck; 
window.returnMessage="You are now logged out."; 
function KeyCheck(e) { 
    var key = (window.event) ? event.keyCode : e.keyCode; 
    alert(key); 
    if(key==116) {window.returnMessage=null;} 
    } 
$(function(){ 
    window.onbeforeunload = function(event) { 
     if(window.returnMessage.length > 0) {logoutFunction();} 
     return window.returnMessage; 
     } 
    }); 
相關問題