2013-10-10 6 views
2

localStorage에서 개별 항목을 제거하려고합니다. listview에 선택된 목록 항목을 저장하기 위해 localStorage를 사용하고 있습니다. 선택한 항목을 제거하기위한 체크 박스를 localstorage에서 첨부했습니다. 그러나 선택한 체크 상자를 제거 할 때 하나의 체크 박스를 선택했을 때처럼 2 ~ 3 개의 항목을 삭제하면 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'); 
     }); 
} 
+0

를 사용하여 코드의 바이올린을 넣어 경우 (또한) 너무 좋은 것) 아직 생각 관련된 HTML 또는 코드의 일부가있다 그래서 ... – ncm

+0

@imsiso localStorage.clear(); 해당 항목을 모두 삭제해도 문제가 없지만 문제는 localStorage.removeItem(); – Lucky

+0

당신은 HTML입니까? 그리고 당신은 그걸로 로컬 스토리지를 설정하는 코드는 무엇입니까? – ncm

답변

8

자신의 키 값에 의해 로컬 스토리지 항목을 제거,이 같은 항목을 제거하려고은

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

는이 Link를 참조하십시오 로컬 저장소에 대한 읽기

+0

당신이 말한 것처럼 노력했지만 아무 것도 제거하고있다 : ( – Lucky

+0

처음에 나는 이것이 문제가 될 것이라고 생각했지만 그것은 열쇠를 제거하는 실제적인 방법으로 보이지 않는다. – Jonast92

+0

크롬과 사파리 둘 모두에서 잘 작동합니다. 이 plunker를보고 더 많은 버튼을 누른 다음 dev에 도구를보고있는 동안 데이터베이스 삭제를 선택하면 "설정"데이터베이스 삭제를 볼 수 있습니다. [PLUNKER] (http://plnkr.co/3H1kgFKWsr341zsWLZvp) – Helzgate

1

localstorage.removeItem() 예상대로 작동하지 않습니다. 나는 localstorage 항목을 다루려고 할 때 같은 문제에 직면했다.

이 문제의 해결 방법은 set the local storage item to null입니다. 그것은 내 목적을 달성했습니다.

당신이 test라는 이름의 로컬 스토리지 항목은 다음 항목 사용을 취소해야하는 경우 예를 들어

:이 올바른 방법을하지 않을 수 있지만

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

, 내가이 문제를 통해 제정신이 갔다하고, 상기 하나 제공 내 목적.

+0

그래도 오랫동안이 문제에 직면 해 있습니다. 아직 해결되지 않았습니다. ( – Lucky

+0

@ user2384323 : 상태를 null로 설정하려고 했습니까? –

+1

흠, 브라우저에 자체 localStorage 파일에 대한 액세스 권한이 없기 때문에 Internet Explorer가 일부 사용자 계정에서도 작동하지 않는다는 것을 알았습니다. 불편한 것처럼 보입니다. – Ringo

2

나는 문제가이 부분에서 생각 : 그래서 당신은 localStorage.key(1)를 가리키는

var url = localStorage.key(checked); 

checked==[Object]==1을 : 당신은 삭제하고 당신이 사용하고 있기 때문에 대한 올바른 키를 사용하지 않는

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


이 문제를 해결하기 위해 양쪽 모두 key=localStorage.key(some);localStorage.removeItem(key);localStorage.removeItem(some);을 사용해야하지만 중요한 부분은 각 체크 박스에 대해 '색인 (첫 번째 방법)'또는 '키 값 (두 번째 방법)'과 일치해야한다는 것입니다. 전체 코드가 있으면

+0

localStorage.key (확인) 대신 바꿔야 할 항목이 있습니까? – Lucky

+0

해당되지 않습니다. 나에게 명확한가 로컬 저장소에서 선택한 확인란의 데이터를 삭제 하시겠습니까? – ncm

+0

그리고 거기에 삭제 링크가 있습니다 모자를 클릭하면 스토리지에서 선택된 체크 박스의 데이터가 오른쪽으로 이동합니까? – ncm

1

그냥 내가 생각 로컬 저장소에있는 모든 데이터를 삭제하는 localStorage.clear();