2010-07-10 38 views
18

如果用戶刷新有問題的頁面,它會向數據庫添加另一條記錄,所以我想通過一個警告框警告用戶,如果他們真的想刷新頁面,並且他們點擊確定,那麼頁面應該刷新,否則如果他們點擊取消它不會。如何在點擊瀏覽器刷新按鈕時彈出警告框?

如何在瀏覽器的刷新按鈕以跨瀏覽器兼容的方式單擊時顯示此類警報框?

回答

33

你可以這樣說:

window.onbeforeunload = function() { 
    return "Data will be lost if you leave the page, are you sure?"; 
}; 

這將顯示一個提示給用戶,讓他們取消。這不是特定的刷新,但爲了您的目的(如編輯一個關於SO的問題),似乎並不重要,無論您在哪裏,都會丟失信息。

+0

但有一個問題,你的信息「的數據都將丟失,如果你離開這個頁面,你確定?」出現在警告框中的另一條消息下:「您確定要從此頁面導航」,並在下面顯示消息「按繼續導航或取消保留在當前頁面上」。有沒有什麼方法可以自定義這2個其他消息? – Faber 2010-07-10 23:20:53

+0

@Faber - 不是我所知道的......這是一個每個瀏覽器的事情都會有所不同,'onbeforeunload'事件非常*非標準。 – 2010-07-10 23:23:41

+0

此外,我只是在這裏猜測,但它是可以檢測頁面刷新檢查,看看是否接下來的url匹配當前頁面的url,以某種方式與js?因爲現在如果用戶點擊主頁或其他一些不會向db添加條目的頁面,它仍會彈出該消息。 – Faber 2010-07-10 23:23:54

7

沒有辦法將其與刷新操作綁定,但您可能需要查看window.onbeforeunload。這將允許您運行一個函數,在頁面卸載之前返回一個字符串。如果該字符串不爲空,那麼會彈出一個確認對話框,其中包含此字符串以及瀏覽器提供的其他一些樣板文本。

例如:

window.onbeforeunload = function() { 
    if (someConditionThatIndicatesIShouldConfirm) { 
     return "If you reload this page, your previous action will be repeated"; 
    } else { 
     return ""; 
    } 
} 

此外,如果當前頁面是通過POST操作加載,然後在瀏覽器應該已經當用戶嘗試刷新它顯示一個確認框。作爲一般規則,任何改變服務器上數據狀態的操作都應該通過POST請求來完成,而不是通過GET來完成。

+0

這種行爲爲我工作 - 當我離開了回報「」 - 似乎返回任意字符串將導致提示 – stackdump 2017-08-08 16:13:51

1

這是不可能的。您可以做的最好的事情是使用onbeforeunload事件,但是會在事件中觸發離開當前頁面的任何事件。專門針對刷新按鈕是不可能的。

參見例如this question上onbeforeunload

它可能會更好,但重建檢查到您的數據庫。這將使用「返回」按鈕捕獲意外提交。

另一種方法是使用內置於表單中的隨機一次性令牌。如果兩個操作使用相同的標記進行嘗試,則會停止它。

2

有兩種可能的解決方法,兩者有很大不同。

一種方法是將事件處理程序綁定到onbeforeunload事件,以便您可以檢測當用戶從當前頁面瀏覽時。如果我的記憶正確地爲我服務,但是onbeforeunload在瀏覽器中並不一致(我不認爲Opera響應IIRC,但目前無法進行測試)。當然,如果用戶關閉JavaScript,該解決方案將失敗。

第二和更健壯的方式是實施Post Redirect Get pattern其中當使用時,可以防止被張貼時再次用戶刷新頁面的數據。

+0

+ 1用於Post重定向獲取 – Robert 2010-07-11 00:38:10

0

你可以使用jQuery爲此... 爲此你必須附加jquery的js文件。

<script> 
var count=0; 
$(document).ready(function(){ 
    alert("hi" + (count++)); 
    confirm("sure?") 
}); 
</script> 
+1

他問了關於刷新按鈕 – ppaulojr 2013-09-28 15:15:29

相關問題