【问题标题】:Store and retrieve the dynamically populated drop-down list in a localStorage在 localStorage 中存储和检索动态填充的下拉列表
【发布时间】:2014-08-19 15:53:52
【问题描述】:

我有一个动态填充的下拉列表。我发送一些 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。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript jquery html local-storage


    【解决方案1】:

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

    localStorage.setItem("test",test);
    

    使用

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

    这绝对不会覆盖。在你的 display() 中检索使用这个

    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】:

    每次迭代都会覆盖本地存储中的项目,因为密钥始终是“测试”。

    您可以将密钥更改为:

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

    这将使它们独一无二,并且所有值都将被存储。您可能希望将键更改为更具描述性的内容。

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

    【讨论】:

    • 好的,如果我将密钥更改为此我将如何检索它?又是一个 for 循环,那么我应该使用 localStorage.getItem("test"+i);>??
    • 你也可以存储 i 的值,这样它只会保存最高的迭代,然后你可以再次循环
    • 但是,我们如何在从本地存储中检索时获得选定的选项?
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-06-26
    • 2015-12-11
    相关资源
    最近更新 更多