【问题标题】:Removing items from the localStorage从 localStorage 中删除项目
【发布时间】:2013-10-17 18:04:30
【问题描述】:

我正在尝试从 localStorage 中删除单个项目。我正在使用 localStorage 在列表视图中存储选定的列表项。我附加了用于从本地存储中删除所选项目的复选框。但是,当我删除选定的复选框时,它没有像我选择一个复选框时那样正确删除,它删除的两个或三个项目正在从 localStorage 中删除。

HTML代码:

<!-- Favourites page -->
<div data-role="page" id="fav">
     <div data-role="header" data-position="fixed">
    </div>
    <div data-role="content" class="ulDiv">
    <ul data-role="listview" data-split-icon="minus" data-split-theme="d" data-filter="true"data-icon="false" data-filter-placeholder="Search" id="favoritesList">
            </ul>
    </div>
    <div data-role="footer" data-position="fixed" class="my-footer">
    </div>
</div>

我的 Js 代码:

 $(document).ready( function() {
    $("#section_list").on('click', 'a', function() {
                var item = $(this).find('h2').text();
                var desc = $(this).find('p').text();
                var html = '<p></br><p class="description">' + desc + '</p>';
                $('.addToFavoritesDiv').click(function() {
                    var url = $(location).attr('href');
                    if (!supportLocalStorage())
                    {
                        item = 'No support';
                    }
                    else
                    {
                        try
                            {
                                localStorage.setItem('autosave' + url, item + html);

                            }
                        catch (e)
                            {
                                if (e == QUOTA_EXCEEDED_ERR)
                                {
                                    alert('Quota Exceeded');
                                }
                            }   
                    }
                });
    });

    $('#fav').click(function() {
        fromStorage();
        $("#favoritesList").listview('refresh');
    }); 

    $(document).on('click', '#edit', function() {
        fromGetStorage();
    });
});

function supportLocalStorage()
{       
    return typeof(Storage) !== 'undefined';
}

function fromStorage()
{
    $("#favoritesList").empty();
    $("#favoritesList").listview('refresh');
    for (var i = 0; i < localStorage.length; i++) {
        var url = localStorage.key(i);
            var item = localStorage.getItem(url);
            $("#favoritesList").append('<li id="add"><a href="' + url + '" style="text-decoration:none;color:black">' + item  + '</a></li>').attr('url', url);
    }
    $("#favoritesList").listview('refresh');
}

function fromGetStorage() 
    {   
     $("#favoritesList").empty();  
     $("#favoritesList").append('<input type="checkbox" name="all" id="select" />Select all</br>');
     $("#fav .ui-listview-filter").remove();
        for (var i = 0; i < localStorage.length; i++) {
        var url = localStorage.key(i);
         var item = localStorage.getItem(url);
          $("#favoritesList").append('<li id="add"><div><input type="checkbox" name="check" id="check">&nbsp;<a href="' + url + '" style="text-decoration:none;color:black">' + item + '</a></div></li>').attr('url', url);
        $("#favoritesList").listview('refresh');
 }

$("#select").click(function(event){
    event.stopPropagation();
});
    $('#select').change(function() {
    if($("#select").is(':checked')) {
        $("#add #check").prop("checked", true);
        $('#empty').on('click', function() {
            localStorage.clear();
        $("#favoritesList").listview('refresh');
        });
    }
    else {
        $("#add #check").prop("checked", false);
    }
 });


$("#add #check").click(function(event){
    event.stopPropagation();
});

    $("#add #check").change(function() {
        var chkLength = $('input[name="check"]:checkbox').length;
        var chkdLength = $('input[name="check"]:checkbox:checked').length;
        if (chkLength == chkdLength)
        {
            $('#select').prop('checked', true);
        }
        else 
        {
            $('#select').prop('checked', false);
        }

});

$("#delete").on('click', function() {
                var checked = $('#add #check:checkbox:checked');
                    var url = localStorage.key(checked);
                    localStorage.removeItem(url);
                    $("#favoritesList").listview('refresh');
        });
} 

【问题讨论】:

  • 你正在删除本地存储中的所有数据我认为这就是为什么......
  • @imsiso localStorage.clear();用于删除所有项目,但问题出在 localStorage.removeItem();
  • 你的 HTML 在哪里?你设置本地存储的代码在哪里?
  • @imsiso 我也更新了关于本地存储和 Html 的完整代码。
  • @ken-abdias-software 有什么帮助吗?

标签: jquery html checkbox local-storage


【解决方案1】:

只需使用localStorage.clear();

【讨论】:

    【解决方案2】:

    我认为问题出在这部分:

    $("#delete").on('click', function() {
                var checked = $('#add #check:checkbox:checked');
                var url = localStorage.key(checked);
                localStorage.removeItem(url);
                $("#favoritesList").listview('refresh');
    });
    

    您没有使用正确的密钥进行删除,因为您正在使用:

    var url = localStorage.key(checked);
    

    checked==[Object]==1 所以你指向localStorage.key(1)


    为了解决这个问题,您可以同时使用key=localStorage.key(some);localStorage.removeItem(key);localStorage.removeItem(some);,但重要的是您应该为每个复选框匹配“索引(第一种方式)”或“键值(第二种方式)”,并且如果我有完整的代码,我可以帮助你(我认为仍然有一些 HTML 或相关的代码)(如果你把你的代码放在一个小提琴上,那就太好了)

    【讨论】:

    • 所以代替 localStorage.key(checked) 我必须替换什么?
    • 我不清楚你想从本地存储中删除所选复选框的数据吗?
    • 还有一个删除链接,当你点击它时,被选中的复选框的数据会从存储中对吗?
    • 我可以做一个小提琴,但问题出在数据上。我正在使用 xml 和 txt 作为数据..为此制作小提琴有些困难
    • 好的,您阅读我更新的答案了吗?你应该匹配一些东西并用它来指向已经存储在 localStorage 中的数据来删除它们
    【解决方案3】:

    localstorage.removeItem() 不会按预期工作。我在尝试处理本地存储项目时遇到了同样的问题。

    解决此问题的方法是发送至 set the local storage item to null 它达到了我的目的。

    例如,如果您有一个名为 test 的 localStorage 项目,则清除该项目使用:

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

    虽然这可能不是正确的方法,但我已经在这个问题上发疯了,而上述问题达到了我的目的。

    【讨论】:

    • 是的,即使我长期面临这个问题..还没有解决:(
    • @user2384323 : 你尝试将状态设置为 null 吗?
    • 嗯,你有没有弄清楚你遇到的根本问题?我注意到即使现在 IE 也不适用于某些用户帐户,因为浏览器无法访问其自己的 localStorage 文件,这似乎很荒谬
    • @Ringo : 仍在黑暗中寻找.. 尚未找到此特定问题的根本原因。
    • 我怀疑基于安全设置和其他偏好的浏览器问题记录不足。
    【解决方案4】:

    尝试像这样删除项目,通过键值删除本地存储项目

    //syntax is localStorage.removeItem('keyName');
    //so if your key name is checked                  
    localStorage.removeItem('checked');
    

    请参阅 Link 了解有关本地存储的信息。

    【讨论】:

    • 起初我以为这是问题所在,但它似乎不是删除键的实际方法。
    • 它在 chrome 和 safari 中对我来说都很好。看到这个 plunker 并点击更多按钮,然后在查看开发工具时选择删除数据库,您应该会看到“设置”数据库删除。 PLUNKER
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多