2011-10-04 89 views
7

我有一個頁面有一個窗體中的幾個複選框,選中時,用jQuery過濾相應的信息。我的問題是以下情形:清除窗體上的後退按鈕?

  1. 有人檢查一個或多個箱子,從表

  2. 隱藏行他們點擊一個鏈接,去到另一個網頁

  3. 他們點擊後退按鈕。

在這一點上,複選框仍然被檢查(至少在chrome中),但所有的表格行都是可見的。

任何想法?

回答

7

如果你的目標是把他們帶回到他們離開之前,他們有確切的示圖(錶行仍隱藏):

就是這樣一個網站的缺點(或優勢):它是無狀態的,特別是當涉及到客戶端操縱時。

您需要做的是將應用程序狀態存儲在URL哈希標記中,以便當用戶使用後退按鈕時,可以檢索「狀態」並重建其視圖。

下面是它的答案可以幫助你另一個問題:jquery javascript: adding browser history back with hashtag?

如果你的目標是要返回的頁面到其初始狀態:

只是重置頁面加載的所有複選框:

$('input:checkbox').prop('checked', false); 

- 或 -

重置整個表單:

$(':input','#myform') 
.not(':button, :submit, :reset, :hidden') 
.val('') 
.prop('checked', false) 
.prop('selected', false); 
4

不要讓你的緩存網頁,或添加代碼重置您的形式:

$("form input").each(function(){ 
    var elem = $(this); 
    var type = elem.attr("type"); 
    if(type == "checkbox") elem.prop("checked", ""); 
    else if(type == "text") elem.val(""); 
}); 

.each已被使用,因爲CSS選擇器input[type=text]不匹配<input />,而元素仍是一個文本元素。

2

所以你的問題不在於瀏覽器緩存用戶輸入,而是行未被隱藏。您可以通過添加一個jQuery腳本輕鬆解決此問題,該腳本將檢查複選框是否被選中(加載頁面後)。如果它被選中,您隱藏的行:)

僞代碼:

1. wait for the page to load 
2. for each checkbox check if checked 
3. if it's checked, hide the corresponding row in the same way you did when the user checked it. 
3

對於IE重置表格提交後,並沒有幫助我。取而代之的是代碼爲我工作。瀏覽器後退按鈕也會調用頁面加載事件。

$(window).load(function() { 
    $('form').get(0).reset(); //clear form data on page load 
});