1

「localStorage.removeItem」がループを停止するのはなぜですか?「localStorage.removeItem」を削除して「alert」だけを残すと、すべてがループしますが、「localStorage.removeItem」を使用すると、最初の一致で停止します。

function removeTask() {
    for (i=0; i < localStorage.length; i++){
        checkbox = document.getElementById('utford'+i);
        if (checkbox.checked == true) {
            alert(i);
            localStorage.removeItem(localStorage.key(i));
        }
    }
    printList();
}
4

2 に答える 2

6

アイテムを削除すると、キーはインデックスを下に移動します。逆方向にループする必要があります。

function removeTask() {
    for (var i=localStorage.length-1; i>=0; i--){
        var checkbox = document.getElementById('utford'+i);
        if (checkbox.checked == true) {            
            localStorage.removeItem(localStorage.key(i));
        }
    }
    printList();
}
于 2012-10-31T16:58:10.873 に答える
0

エントリを削除しながら、配列のようなオブジェクトを反復処理しています。削除するたびにエントリの順序が混同されるため、これは機能しません。

この例を考えてみましょう。

最初の繰り返しでエントリ #1 を削除します。

Entry   key             value
#1      my-first-key    my-first-value
#2      my-2nd-key      my-2nd-value

2 回目の繰り返しで、エントリ #2 の削除を試みます。

Entry   key             value
#1      my-2nd-key      my-2nd-value
???     ???             ???

私が作成したコードから、代わりに文字列キーを使用することをお勧めします。次に、要素の ID と同じキー名を選択できます。

于 2012-10-31T17:04:50.733 に答える