2010-11-09 20 views
1
我有在窗口卸載提交表單,如果表單信息已被更新的問題

提交表單(album.updated = TRUE):問題上window.unload

 
window.onunload = function(evnt) { 
    if (album.updated) { 
    var save = confirm('Do you want to save changes?'); 
    if (save) { 
     alert('submitting form...'); 
     document.edit_photos.submit(); 
    } 
    } 
} 

它告誡「提交表單」,但沒有什麼是保存。但是,當我使用「保存」按鈕進行常規提交時,它會保存信息。這裏有什麼可能是錯的?

回答

3

您無法可靠地與unload事件中的服務器進行交互。

發送AJAX請求可能稍微可靠一些,但也不應該依賴。

相反,您應該處理onbeforeunload事件和return "You have unsaved changes";
這將指示瀏覽器顯示允許用戶取消導航的確認對話框。 (之後他可以手動保存)

2

你不會在unload上做任何事情。有一段時間允許更多,但不好的網站用來捕捉和混淆用戶,所以這已被鎖定。

您可以獲得的唯一交互是通過onbeforeunload。而且你不能可靠地提示在這裏保存......你通常不被允許通過直接提交表單來繞過導航。您可以嘗試使用XMLHttpRequest發佈保存請求,但不能保證在頁面導航離開之前它會到達服務器。

因此,所有你能合理地做的是提醒用戶的未保存的數據,促使他們取消了導航和保存數據本身:

window.onbeforeunload= function() { 
    if (album.updated) 
     return (
      'You have unsaved changes to this album. Are you sure you wish '+ 
      'to leave without saving?' 
     ); 
};