2015-09-30 94 views
0

我有一個onbeforeunload事件,當我離開頁面並運行附加到該事件的代碼時,它應該會觸發。我把它放在我的頁面中的cshtml的腳本標記中,所以理論上它應該只在我處於特定頁面時纔會觸發並且離開它(我對事件的理解可能不正確)。但是,當我轉到另一頁時,onbeforeunload事件似乎不想觸發。我試圖設置一個斷點,但似乎沒有打它,並沒有得到我的控制檯在螢火蟲的任何錯誤。onbeforeunload不會觸發

我已經看過這個帖子用這個事件來檢測換頁 Best way to detect when a user leaves a web page?

<script type="text/javascript"> 

$(document).ready(function() { 

    window.onbeforeunload = SaveDashboard; 


}); 

function SaveDashboard(){ 
    var gridArray = _.map($('.grid-stack .grid-stack-item:visible'), function (el) { 
     el = $(el); 
     var gridID = el.find('.grid-stack-item-content.ui-draggable-handle').first().attr('id'); 
     var node = el.data('_gridstack_node'); 
     return { 
      id: gridID, 
      x: node.x, 
      y: node.y, 
      width: node.width, 
      height: node.height 
     }; 
    }); 

    $.ajax({ 
     url: 'Dashboard/EditWidgets/', 
     type: 'PUT', 
     data: { 
      widget: gridArray 
     }, 
     success: function (dataset) { 
     }, 
     failure: function (xhr, error) { 
      console.log(xhr) 
      console.log(error) 
     }, 
    }); 
} 
</script> 
+0

[「*此事件在窗口即將卸載其資源時觸發。文檔仍然可見並且事件仍可取消。*」](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload)因此,當您關閉窗口時,如果您仍在查看頁面,它會觸發。如果您在關閉時查看其他頁面,它不應該觸發。 –

+1

這是一個事件處理程序,我不會**在'document.ready()'內部聲明,因爲您希望儘快將它附加到窗口。 – dave

+1

請注意,除非您返回非空(非空/未定義)值,否則不會顯示提示。你的SaveDashboard函數不會返回任何東西,儘管在任何情況下都應該打中斷點 –

回答

0

你應該在onbeforeunload處理程序返回一個字符串,其中提到的海報之一。如果你不返回任何東西,這個事件不會觸發你的處理程序。您必須返回的文本是將放置在瀏覽器打開的提示中的文本,以詢問用戶是否真的想離開該頁面。