2012-03-29 10 views
0

jQueryのHTML5のlocalStorage removeItemここでは、このコードのエラー

$('#doneItem').click(function(){ 
     $(this).each(function(index){ 
      var item = 'personal' + index; 
      alert(item); 
      localStorage.removeItem('personal' + index); 
      window.location.reload(true); 
     }); 
}); 

#doneItemがボタンである、と私は元のための 'personal0' を削除します。 from localStorage and ... Uncaght TypeError:未定義のメソッド 'removeItem'を呼び出すことはできません。何か案は??

+0

''personal' + index'の項目はすべてlocalStorageにありますか? – Niklas

+0

あなたがあなたが望んでいた項目を取得していることを警告するとき?何が起こるかを見るためにあなたのアイテム変数だけ(「個人」+インデックス)を置き換えようとしましたか?ニクラスもとても良い点があります。 .each()を実行していてlocalStorageにないものが見つかった場合は、そのエラーも表示されます。見つかったものは削除されますが、それが届かない場合はエラーが表示されます。 –

+0

私は置き換えようとしましたが、同じ結果が得られました。そして警告は、これが正しい結果であることを確認することです。コンソール:78event.layerXとevent.layerYは壊れており、WebKitでは廃止予定です。 script.js:33Uncaught TypeError:未定義のメソッド 'removeItem'を呼び出せません – fre2ak

答えて

1

アイテムを削除しようとする前に、アイテムがlocalStorageにあるかどうかを確認できますか?

if (item in localStorage) localStorage.removeItem(item); 

ブラウザでlocalStorageが使用されていることを確認したとしますか?

EDIT
動的IDを使用できます。これにより、doneItemで始まるすべてのa要素に一致し、最後にindex変数に番号が取得されます。

$("a[id^=doneItem]").click(function(){ 
      var index = $(this).attr("id").replace("doneItem", "");     
      var item = 'personal' + index; 
      localStorage.removeItem(item); 
      window.location.reload(true); 
    }); 

また、この行を変更し、そこiを挿入する必要があります:

document.write("<a data-role=\"button\" id=\"doneItem" + i + "\" data-transition=\"none\" href=\"#showPersonal\" data-icon=\"check\" data-iconpos=\"left\">Done</a>"); 

あなたもModernizrコードをコメントアウトする場合にのみ動作します。ここではlocalstorage変数を置き換えていますが、なぜそうするのか分かりません。これらの問題はjsfiddleであるかもしれない

/* 
    if (Modernizr.localstorage) { 
      var localStorage = window.storage; 
    } else { 
      alert('Your browser does not support local storage!'); 
    } 
    */ 

ので、私はいくつかのより多くのコードを削除する必要がありましたが、ここでは、やや作業例です:http://jsfiddle.net/zr4tg/53/

あなたが望むようにそれは見えないかもしれませんが、それは動作するはず。私に教えてください=)

+0

アイテムはlocalStorage 100%にあり、ブラウザはhtml5 localStorageをサポートしています。しかし、私は 'localStorage.removeItem( 'personal0');'(正確なキー)とdafuq ..のようなものを書くと、エラーはevanに見えます。 – fre2ak

+0

なぜここでそれぞれを使用しているのか再度説明できますか?私はこれを次のように読んでいます: '#doneItem'要素ごとに、localStorageからインデックスを削除してください。しかし、1つの 'doneItem'しか存在できません。また、なぜあなたはそれから情報を使用していない場合、この関数を '#doneItem'に適用していますか?各機能の中にあるコードは、それだけでなくその外にあっても機能しますか?#doneItem要素ごとに – Niklas

+0

(localStorageのデータからjs forループで多数生成されます)、#doneItemのインデックスを取得し、これを次のように連結します(例: "personal" + index)。 localStorageのキーである "personal0"です。そのキーを持つ要素を削除し、結果を表示するためにページを更新したいと思います。 – fre2ak