2013-07-24 57 views
3

我的表單包含多個按鈕和超鏈接,我想在瀏覽器的後退按鈕上顯示警報。 我在下面的代碼,適用於Chrome和Safari,但在IE無法正常工作和Firefox蠻好用的:如何防止window.onbeforeunload事件被按鈕觸發並鏈接事件

 window.onload = function() { 

      var btnClicks = document.getElementsByClassName('noPopup'); 
      var links = document.getElementsByTagName('a'); 

      for (var i = 0; i < links.length; i++) { 
       links[i].onclick = setGlobal; 
      } 
      for (var i = 0; i < btnClicks.length; i++) { 
       btnClicks[i].onclick = setGlobal; 
      } 
      function setGlobal() { 
       window.btn_clicked = true; 
       window.linkClicked = true; 
      } 

       window.onbeforeunload = function() { 
        if (!window.btn_clicked || !window.linkClicked) { 
         return 'Would you like to save first.'; 
        } 
       }; 

     }; 

請幫助。

在此先感謝

在IE

回答

5

- 如果你不想onbeforeunload觸發 - 所有你需要做的是這個事件設置爲null,像這樣:

window.onbeforeunload = null; 

等什麼您需要做的是 - 爲所有按鈕和鏈接(將用戶重定向到不同的URI)以及該偵聽器內部添加一個點擊事件偵聽器 - 在點擊之後將它們設置爲onbeforeunload事件偵聽器爲(繼續進行常規鏈接/按鈕操作,否則 - 將其設置爲功能離子(就像你在你的代碼中一樣)。

如:

document.getElementById('myLink').onclick = function() { 
    window.onbeforeunload = null; 
}; 
+3

由於OP是用純JS,你可以請更新您的例子刪除了jQuery部分和u se純JS? –

+0

在這裏,您將溢出window.onbeforeunload,因此如果用戶單擊不會將外部重定向的mybutton,然後單擊返回按鈕,他將不會看到onbeforeunload發生 – ekeren

+0

@ekeren是的,如果按鈕不在外面重定向 - 按鈕不應該觸發'onbeforeunload'事件,因此不需要溢出。我更新了我的帖子。謝謝 – tborychowski

1

使用此beforeunload則只會在瀏覽器關閉沒有錨的任何點擊刷新發生,也將被排除隱藏的內置彈出式消息在返回充當卸載事件卸載事件之前

 

    function confirmExit() 
    { 
     $.ajax({ 
      type: "POST", 
      url: site_url + 'welcome_login/logout', 
      success: function (data) 
      { 
      } 
     }); 
    } 
    $(window).on('mouseover', (function() { 
     window.onbeforeunload = null; 
    })); 
    $(window).on('mouseout', (function() { 
     window.onbeforeunload = confirmExit; 
    })); 

鼠標移出發生在關閉瀏覽器窗口

相關問題