Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript循环在“localStorage.removietem”上停止_Javascript_Local Storage - Fatal编程技术网

JavaScript循环在“localStorage.removietem”上停止

JavaScript循环在“localStorage.removietem”上停止,javascript,local-storage,Javascript,Local Storage,为什么localStorage.removeItem会停止循环?如果我删除localStorage.removietem并只保留警报,它会循环整个过程,但使用localStorage.removietem,它会在第一次匹配时停止 function removeTask() { for (i=0; i < localStorage.length; i++){ checkbox = document.getElementById('utford'+i);

为什么localStorage.removeItem会停止循环?如果我删除localStorage.removietem并只保留警报,它会循环整个过程,但使用localStorage.removietem,它会在第一次匹配时停止

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();
}

如果删除某个项,则键会向下移动索引。你需要向后循环

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();
}

如果删除某个项,则键会向下移动索引。你需要向后循环

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();
}

您在删除类似数组的对象的条目时对其进行迭代。 这无法工作,因为每次删除时条目顺序都会混淆

考虑这个例子

第一次迭代删除条目1:

Entry   key             value
#1      my-first-key    my-first-value
#2      my-2nd-key      my-2nd-value
第二次迭代尝试删除条目2:

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

根据我对代码的理解,我建议您使用字符串键。然后,您可以选择与元素ID相同的键名。

在删除其条目时,您正在对类似数组的对象进行迭代。 这无法工作,因为每次删除时条目顺序都会混淆

考虑这个例子

第一次迭代删除条目1:

Entry   key             value
#1      my-first-key    my-first-value
#2      my-2nd-key      my-2nd-value
第二次迭代尝试删除条目2:

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

根据我对代码的理解,我建议您使用字符串键。然后,您可以选择与元素ID相同的键名。

您的控制台告诉您什么?您应该声明您的局部变量i,顺便说一句,带有var的复选框。谢谢,Pointy,我现在更改了它,但我仍然有同样的问题。如果你打算删除东西,也不要向前迭代,因为你在迭代时修改了列表,结果会很糟糕。使用var i=localStorage.length-1;i>=0;你的控制台告诉你什么?顺便说一句,你应该声明你的局部变量i,带有var的复选框。谢谢,Pointy,我现在改变了,但我仍然有同样的问题。如果你打算删除东西,也不要向前迭代,因为你在迭代时修改列表,结果会很糟糕。使用var i=localStorage.length-1;i>=0;i-@user1755603您应该通过单击checkmark@user1755603您应该单击复选标记将此答案标记为正确