2009年8月25日 星期二

如何避免使用者在特定網頁表單在未經送出時意外離開

「使用者」想「離開網頁」,基於「使用者最大」的原則,瀏覽器不可能真正擋住使用者的去路,所以你的 JavaScript 是不可能「絕對阻擋」網頁離開,你只能「提醒」使用者離開此網頁,所以正確的寫法是在 function 中 return 一段字串訊息即可,如下範例:
window.document.body.onbeforeunload = function()
{
return '您尚未將編輯過的表單資料送出,請問您確定要離開網頁嗎?';
}

當你在網頁中按下 F5 重新整理或點選其他連結試圖離開網頁時,就會先出現提醒訊息

最後,還有個重點觀念,也就是當 onbeforeunload 事件被觸發的同時,如果也有其他事件被觸發的話,在其他事件中不能再修改任何 DOM 物件,因為物件處於正在卸載的狀態,所以當你在其他事件中要執行類似的修改動作,就會影發「未指定的錯誤」的錯誤訊息

所以在撰寫時必須特別注意這個潛在可能發生的錯誤。

當你要進行表單送出時總不能還出現這個離開網頁的提示框吧!所以你還必須在表單的 Submit 按鈕特別加上一段 JavaScript 將 事件取消。
<input type="submit" value="送出" 
onclick="window.document.body.onbeforeunload=null;return true;" />


參考 http://blog.miniasp.com/post/2009/08/How-to-avoid-page-reload-or-redirect-by-incident.aspx

沒有留言:

張貼留言