2012-03-21 102 views
4

我有一個頁面,用戶需要輸入一些數據,然後點擊保存以驗證更改,但我的問題是,如果用戶試圖關閉瀏覽器窗口或點擊不同的鏈接導航到不同的頁面..我需要刪除用戶已保存至今的所有條目。 我這樣做以下方式如何停止卸載頁面?

window.onbeforeunload = function() 
{ 
if(confirm('Are you sure you want to navigate')) 
    { 
    //Invoke `enter code here`server side method 
    } 
else 
{ 
    // return false; 
} 
} 

一切工作正常,如果他點擊是的,問題就來了,當他在「否」點擊..即使他點擊No ..頁面卸載方法被調用,它被重定向到一個不同的頁面..但我希望它保持在相同的狀態在同一頁...你能幫我實現這一點。

感謝,並感謝您迴應....

+2

可能的重複[如何阻止頁面從卸載(導航離開)在JS?](http://stackoverflow.com/questions/1299452/how-do-i-stop-a-page-from-卸載 - 在js中導航) – 2012-03-21 18:22:45

+3

應該調用AFAIR,而不是'confirm',但返回一個字符串。 – kirilloid 2012-03-21 18:27:04

回答

0

onbeforeunload只接受一個字符串作爲返回值。該字符串將由瀏覽器顯示,並保留在頁面上或保留。但是你可以做到這一點。

7

您無法阻止用戶離開頁面。你可以做的就是向他們發出一條消息,詢問他們是否要離開。

window.onbeforeunload事件應返回一個字符串(只有一個字符串)。該字符串將被打印在瀏覽器的警告框中。

您不能使用自己的警報框,或阻止用戶離開(或重定向它們)。

window.onbeforeunload = function(){ 
    return 'Are you sure you want to leave?'; 
}; 

或者用jQuery

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

當用戶離開頁面,則可以使用onunload事件作出AJAX調用(你可能需要在這裏使用async: false)。

例子:

$(window).unload(function(){ 
    $.ajax({ 
     url: '/path/to/page/', 
     async: false, // this may be needed to make sure the browser doesn't 
         // unload before this is done 
     success: function(){ 
      // Do something 
     } 
    }); 
}); 

注意:不是這樣的,你爲什麼不只是保存所有用戶完成時?而不是保存它,然後刪除它,如果用戶沒有完成?

+0

感謝你的回覆..如何使AJAX再次呼叫..你可以請擴展它.. – user788312 2012-03-21 18:34:00

+0

@ user788312:不客氣。我稍微擴大了答案。 – 2012-03-21 18:36:42

+0

+1我喜歡這個解決方案,但我認爲他的應用程序處於無效狀態。沒有人可以保證ajax調用會刪除數據...也有可能是用戶失去了他的互聯網連接或瀏覽器被任務管理器殺死了......等等。 – Neysor 2012-03-21 18:42:58

2

首先:你不能!不可能。 onbeforeunload只接受一個字符串作爲返回值,然後關閉,如果用戶想要的。

但是,想想如果計算機沒有能源並關閉會發生什麼?或者瀏覽器將由任務管理器關閉?或甚至更多「寫實」:互聯網連接丟失! =>那麼你也有無效的數據狀態!

您正試圖解決錯誤的問題!你的問題不是這個功能,你的問題是你的公式的狀態!

爲什麼你需要某種功能?在點擊保存之前是否保存數據?那就不要!或者確保有另一個查詢檢測數據庫中未完成的數據,並在超時後刪除它!

0

您可以使用這樣的事情,只是調用下面的函數你的頁面

function noBack() { 
    window.onbeforeunload = function(){window.history.forward()} 
} 

在這禁用後退按鈕,如果window.history是乾淨的,否則它只能第一次。