2016-09-23 48 views
0

我在一個小型的web應用上工作,我需要在用戶刷新瀏覽器後顯示確認對話框。我使用window.onbeforeunload = function() { ...}來做。問題是它不僅在刷新時被調用,而且在提交後也被調用。我有一個問題:如果window.onbeforeunload是由刷新或提交元素引起的,我能否以某種方式找出問題?JS:如何找出是誰造成了window.onbeforeunload():F5還是提交?

+0

請注意,您提到的兩個選項並不是唯一可以觸發'onbeforeunload'的兩種方法。 – nnnnnn

+0

我只想顯示確認對話框的F5s - 不提交 –

+0

因此,添加一個提交事件處理程序,刪除beforeunload處理程序。 – nnnnnn

回答

0

您可以爲各種事件編寫事件處理程序,這些事件可以使您遠離頁面,並具有管理狀態的標識符。然後,您可以在onbeforepageunload函數中使用此標識符來執行您想要執行的任何操作。以下是查找輸入類型提交併設置標識符的代碼示例。同樣,你可以有一個錨標籤等。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 

</head> 
<body> 
<form action=""> 
    <input type="submit" value="Submit"> 
</form> 
</body> 
    <script> 
    var submit_was_clicked = false; 

    window.addEventListener("beforeunload", function (event) { 
     if(submit_was_clicked){ 
     console.log('submit button clicked') 
     }else{ 
     console.log('on before unload'); 
     } 
    }); 

    document.addEventListener("click", function(e) { 
     if (e.target.type.toLowerCase() === 'submit') { 
      submit_was_clicked = true; 
     } 
    }, true); 
    </script> 
</html>