我正在使用localStorage保存用户首选项,如下所示:
choicesObject = { //put values in an object
"measure1" : $("#m1").is(':checked'),
"measure2" : $("#m2").is(':checked'),
"measure3" : $("#m3").is(':checked'),
"measure4" : $("#m4").is(':checked'),
"measure5" : $("#m5").is(':checked'),
"measure6" : $("#m6").is(':checked'),
"measure7" : $("#m7").is(':checked'),
"measure8" : $("#m8").is(':checked')
}
localStorage.setItem("choices", JSON.stringify(choicesObject));
然后我就这样把它们拿回来了:
retrieveChoices = localStorage.getItem("choices");
choicesObject = JSON.parse(retrieveChoices);
for(var i = 0;i<9 ;i++){
这个问题是:
ticked = choicesObject.measure+i;
它只是不起作用,我尝试过使用引号和方括号。
element = "#m" + i;
if(ticked==true){
$(element).prop('checked', true);
}
else{
$(element).prop('checked', false);
}
}
}
我想循环测量属性并恢复复选框元素。
我知道即使我的对象创建也是低效的,我可以使用for循环,但我只是不知道如何在循环时处理对象属性,因为我不知道你怎么做在不破坏物体的情况下做到这一点。
至少可以工作,我可以将数据输入和输出存储在localStorage中的对象,但是这个非常简单的问题让我很难过。
PS。会
choicesObject = localStorage.getItem(JSON.parse("choices"));
是一个更好的速记?在重新阅读我的问题的同时想到这一点。
编辑:谢谢大家。我很快得到了3个正确的答案!惊人。非常感谢。这个网站及其成员每天都让我感到惊讶,并彻底改变了我的编码!
我将选择正确的答案作为我给我解析的新速记的答案,但是你们所有人都给了我需要知道的东西。我现在要去看看我现在能否回答一些菜鸟问题了!
答案 0 :(得分:1)
使用
ticked = choicesObject["measure"+i];
<小时/> 编辑:你的速记不起作用,改为使用:
choicesObject = JSON.parse(localStorage.getItem("choices"));
答案 1 :(得分:1)
对象就像值的“字典”,因此您可以通过执行myobject.propertyName
或myobject["propertyname"]
来访问属性。它们是等价的。
在您的情况下,您只需要用
替换ticked = choicesObject.measure+i;
ticked = choicesObject["measure"+i];
另外,在定义变量时考虑使用var
关键字,每次省略它时,都会在窗口对象中创建一个新的全局变量,retrievedChoices
和{{1}就是这种情况。 }。您可以在该脚本运行后通过choicesObject
或window["choicesObject"]
或仅window.choicesObject
访问它们来确认这一点。