2013-12-12 60 views
0

我正在研究可以篩選類別,子類別的搜索表單。這是我的html代碼:瀏覽器返回時選擇選項丟失

<select id="category" name="category"> 
    <option value="0">-- All Categories --</option> 
    <option value="one">category one</option> 
    <option value="two">category two</option> 
</select> 
<select id="subcategory" name="subcategory"> 
    <option value="0">-- All Sub Categories --</option> 
</select> 

我用jQuery來篩選子類別

$('#category').on("change",function(){ 
    var cat = $(this).find("option:selected").text(); 
    var subCat = ""; 
    switch (cat) { 
     case "category one": 
     subCat = '<option value="sub1">Sub Category One</option>'; 
     break; 
     case "category two": 
     subCat = '<option value="sub2">Sub Category Two</option>'; 
     break; 
    } 

    $("#subcategory").html(subCat); 
}) 

它正常工作與過濾。但是,我提交了搜索表單並轉到了結果頁面,然後當我點擊瀏覽器「返回」按鈕時。子類別再次成爲「 - 所有子類別 - 」,沒有數據被保存。直到我做出另一個選擇才能觸發更改事件,沒有顯示任何內容。我如何改進我的答案?

+0

我相信這可能是一個非常類似的問題:http://stackoverflow.com/questions/1724739/back-button-handle-a-dynamic-form –

回答

1

有這個網頁內存中的緩存方法,我曾經用來保存整個表格:Using_Firefox_1.5_caching。它也緩存JavaScript狀態,但需要牢記很多設置才能使其正常工作。

在你的情況,因爲你只想保存<select>數據只。我想用document.cookie是一個很好的解決方案:

$('#category').on("change", function() { 
    var cat = $(this).val(); 
    var subCat = ""; 
    switch (cat) { 
     case "one": 
      subCat = '<option value="sub1">Sub Category One</option>'; 
      break; 
     case "two": 
      subCat = '<option value="sub2">Sub Category Two</option>'; 
      break; 
    } 
    setCookie('select', cat); 
    $("#subcategory").html(subCat); 
}) 

var sel = getCookie('select'); 
if (sel) { 
    /* if cookie key 'select' is set change the '#category' selected value 
     and trigger the change() event.*/ 
    $('#category').val(sel).trigger('change'); 
} 

//Cookie functions for setting and retrieving, the duration I set is 24hrs only. 
function setCookie(key, value) { 
    var expires = new Date(); 
    expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000)); 
    document.cookie = key + '=' + value + ';expires=' + expires.toUTCString(); 
} 

function getCookie(key) { 
    var key = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)'); 
    return key ? key[2] : null; 
} 

看到這個jsfiddle

+0

非常感謝您的答案。它效果很好。 – Alex

+0

嗨@MarkS,我也在側欄獲得了表單(它與主表單完全相同)。但Cookie不會以側欄形式記錄。例如,當我在主搜索表單上進行搜索並轉到具有側欄形式的頁面時,側欄形式顯示默認值。 – Alex

+0

你可以在jsfiddle.net上添加一個例子,這樣我可以輕鬆地幫助你。 –

相關問題