2013-12-23 115 views
10

我使用window.onbeforeunload在關閉事件發生時彈出確認對話框,但確認對話框出現在頁面刷新上並且不在頁面關閉時執行。window.onbeforeunload在頁面刷新時執行而不是在頁面關閉時執行

這裏的JavaScript代碼:

<script language="JavaScript"> 
    window.onbeforeunload = confirmWinClose(); 
    function confirmWinClose() { 
     var confirmClose = confirm('Close?'); 
     return confirmClose; 
    }  
</script> 

我試了一下在Chrome,Firefox和Internet Explorer。

+2

只是擔心可能設置window.onbeforeunload = confirmWinClose();這造成的問題,而不是設置它window.onbeforeunload = confirmWinClose; – Neha

+0

好的,這可以防止頁面刷新時執行代碼,但它仍然不會在頁面關閉時執行! –

+0

你*不能*在'onbeforeunload'內使用'confirm'。這不是它的工作原理。你需要'onbeforeunload'返回一個字符串。該字符串將由瀏覽器在其自己的確認框中顯示。 'onbeforeunload'與「正常」事件不同。 –

回答

2

沒有完整的解決方案,但你可以攔截F5鍵(不攔截如果在刷新瀏覽器按鈕,用戶點擊......)

var isRefresh = false; 

// with jquery 

$(function() { 
    $(document).on("keydown", function(e) { 
    if (e.which === 116) 
    { 
     isRefresh = true; 
    } 
    }); 
}); 

window.onbeforeunload = function() { 
if (! isRefresh) 
{ 
    return confirm ('Close ?'); 
} 
return false; 
}; 
+1

和關於它不在頁面關閉 –

+0

謝謝@Paul,你已經解決了我的刷新問題。 :) – kevin

+0

@Paul,順便說一句,有沒有什麼機會來控制刷新瀏覽器?謝謝。 – kevin

6

你的代碼問題:

的功能將在您撥打refresh時調用,因爲on refresh the page is unloaded and then reloaded

在您的解決方案

,你也應該注意,你是不是分配functionwindow.onbeforeunload,但是當你寫

window.onbeforeunload = confirmWinClose(); 

這可能也執行該功能你分配return value of the function(基於你在哪裏把它在JavaScript)每當分配完成。對於例如

function confirmWinClose() { 
var confirmClose = confirm('Close?'); 
return confirmClose; 
} 

window.onbeforeunload = confirmWinClose(); 

上述代碼將執行confirmWinClose功能每當這個js是加載。

(如您已定義調用後的功能,所以不會對負載運行,但是你應該記住這不是你的情況下)

SOLUTION:

以下解決方案正在爲close

,而不是你的解決方案,我想這

JS:

window.onbeforeunload = function() { 
    var confirmClose = confirm('Close?'); 
    return confirmClose; 
} 

window.onbeforeunload = confirmWinClose; //note the absence of calling parantheses 

    function confirmWinClose() { 
     var confirmClose = confirm('Close?'); 
     return confirmClose; 
    } 

此按預期工作。

也請注意,您應該明確地從onbeforeunloadreturn

即使你調用一個函數,你應該做的

<script> 
    window.onbeforeunload = function(e) { 
     callSomeFunction(); 
     return null; 
    }; 
</script> 
+0

沒有任何變化 –

+0

@JavaPlayer看到編輯 – gaurav5430

+0

沒有改變 –

0

試試這個它會工作。您將該方法分配給需要在事件發生時執行的onload,因此它需要像對象一樣。參考鏈接,更好的解釋 - var functionName = function() {} vs function functionName() {}

window.onbeforeunload = confirmWinClose; 
function confirmWinClose() { 
var confirmClose = confirm('Close?'); 
return confirmClose; 
}; 
0

既然你反正只是想顯示你的文字,只是用什麼onbeforeunload因爲預計只返回字符串?

<script language="JavaScript"> 
    window.onbeforeunload = confirmWinClose; 
    function confirmWinClose() {return "close?";} 
</script>