在localStorage中存储和检索动态填充的下拉列表

时间:2014-08-18 10:19:58

标签: javascript jquery html5 local-storage

我有一个动态填充的下拉列表。我发送一些ajax请求并获得响应,并根据条件填充下拉列表。 现在我需要将这些填充的列表存储在localStorage中,因为我需要显示先前在页面刷新时填充的值。

除了我只获取下拉列表中填充的最后一个值外,一切正常。并非以前填充的所有值。我需要检索之前填充的所有值。

的index.jsp

<input type="radio" class="radioButton" value="Display all" checked onclick="fnCheck();"> Display All

<input type="radio" class="radioButton" value="Display Divisions" onclick="fnCheck();"> Display Divisions


    <input type="radio" class="radioButton" value="Display Data" onclick="fnCheck();"> Display Data 
    <select id="convoy_list">
    <option>Values</option>
    </select>
    <input type="button" id="testbtn" value="Test" onclick="fnClickTest();" >
    <input type="button" id="ok" value="OK" onclick="fnOK();" >
    <input type="button" id="Refresh" value="Refresh" onclick="fnDisplay();" 

myjs.js

function test(){
    $.ajax({
    //some requests and data sent
    //get the response back

    success:function(responsedata){
        for(i=0;i<responsedata.data;i++):
        {
            var unitID=//some value from the ajax response
            if(somecondition)
            {
                var select=$(#convoy_list);
                $('<option>').text(unitID).appendTo(select);
                var conArr=[];
                conArr=unitID;
                test=JSON.stringify(conArr);
                localStorage.setItem("test",test);
            }
        }
    }
    });
}

在另一个函数中说display()我尝试检索localStorage值

    function display(){
    if(localStorage.getItem("test")){
    var listId=$(JSON.parse(localStorage.getItem("test")));
    var select=$(#convoy_list);
        $('<option>').text(listId).appendTo(select);

    }

这里,如果下拉列表中填充的数据是实例的C1 C2和C3。刷新页面后,只在下拉列表中填充C3。我希望刷新后填充所有值,即C1,C2,C3。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

每次迭代都会覆盖localstorage中的项目,因为密钥总是“test”。

您可以将密钥更改为:

localStorage.setItem("test-"+i,test);

这将使它们成为唯一的并且将存储所有值。您可能希望将密钥更改为更具描述性的内容。

或者您只是存储来自ajax调用的响应,然后创建一个形成下拉列表的函数,可以在ajax成功和显示函数中调用。

答案 1 :(得分:2)

正如David所说,你正在覆盖localStorage中的项目。您命名的密钥应始终是唯一的。密钥的值在每次迭代时都在变化,但不是密钥名称。因此,要存储它,您需要在每次迭代时使用具有不同名称的键。 而不是使用

localStorage.setItem("test",test);

使用

localStorage.setItem("test"+i,test);

绝对不会覆盖。检索时在显示屏中使用它()

function display(){
for(var i=0;i<localStorage.length;i++){
    if(localStorage.getItem("test"+i)){
    var listId=$(JSON.parse(localStorage.getItem("test"+i)));
    var select=$(#convoy_list);
        $('<option>').text(listId).appendTo(select);

    }
  }
}

这将附加先前填充的下拉列表中的所有值。