首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在localStorage中存储和检索动态填充的下拉列表。

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

Stack Overflow用户
提问于 2014-08-18 10:19:58
回答 2查看 3.3K关注 0票数 3

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

除了我只得到下拉列表中的最后一个值外,一切都很好。并不是以前填充的所有值。我需要检索以前填充的所有值。

index.jsp

代码语言:javascript
复制
<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

代码语言:javascript
复制
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值

代码语言:javascript
复制
    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 )。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 07:53:52

正如大卫所说,您正在用localStorage覆盖该项目。你命名的钥匙应该永远是唯一的。键的值在每次迭代时都是变化的,而不是键名。因此,为了存储它,您需要在每次迭代中使用不同名称的键。而不是使用

代码语言:javascript
复制
localStorage.setItem("test",test);

使用

代码语言:javascript
复制
localStorage.setItem("test"+i,test);

这绝对不会被覆盖。在检索时,请在显示器()中使用这个

代码语言:javascript
复制
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);

    }
  }
}

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

票数 2
EN

Stack Overflow用户

发布于 2014-08-18 14:28:17

您正在用每次迭代覆盖本地存储中的项,因为键总是'test‘。

您可以将密钥更改为:

代码语言:javascript
复制
localStorage.setItem("test-"+i,test);

这将使它们是唯一的,并且所有的值都将被存储。您可能想要更改一些更描述性的东西的关键。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25361020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档