Javascript 遍历对象数组以填充输入字段
我目前正在为Google Forms开发一个解决方案,它可以将所有输入存储在cookies中,这样用户就可以在不同的时间进行调查。 目前,我能够通过使用Javascript 遍历对象数组以填充输入字段,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我目前正在为Google Forms开发一个解决方案,它可以将所有输入存储在cookies中,这样用户就可以在不同的时间进行调查。 目前,我能够通过使用JSON.stringify(),将所有问题(问题是一个包含:周围div的id、required、userinput的对象)存储在cookie中。我还能够读取和解析cookie,从而获得所有问题对象的数组 现在我想填充所有字段或检查所有有值的单选按钮。 我的问题是,内部for循环只进行了2次迭代,但它应该进行18次。你知道什么可能是错误的吗 fu
JSON.stringify()
,将所有问题(问题是一个包含:周围div的id、required、userinput的对象)存储在cookie中。我还能够读取和解析cookie,从而获得所有问题对象的数组
现在我想填充所有字段或检查所有有值的单选按钮。
我的问题是,内部for循环只进行了2次迭代,但它应该进行18次。你知道什么可能是错误的吗
function restoreInputs() {
// number of stored cookies
var countCookies = 27;
console.log(countCookies);
// iterate through all cookies
for (var i = 1; i < countCookies + 1; i++) {
var cookiename = "answer" + i;
// get content of cookie (is array of objects)
var answer = checkCookie(cookiename);
// iterate through content
for (var j = 0; j < answer.length; j++) {
// get value of object
var val = answer[j].value;
// get the input field (textarea or radio button)
var x = document.getElementById(answer[j].n).getElementsByTagName('input');
// if input is radio, then check the one at position stored in value of object
if (x[j].type === "radio") {
x[val].checked = true;
// if textarea set its value to the one stored in object value
} else {
x[j].value = val;
}
console.log("j: " + j);
}
}
console.log(i);
}
函数restoreInputs(){
//存储的Cookie数
var=27;
console.log(countCookies);
//遍历所有cookie
对于(变量i=1;i
我找到了解决方案。问题是我忘记了for循环,因为var x=document.getElementById(答案[j].n.)。getElementsByTagName('input');
可能返回多个元素。因此,解决方案如下:
function restoreInputs() {
// number of stored cookies
var countCookies = 27;
console.log(countCookies);
// iterate through all cookies
for (var i = 1; i < countCookies + 1; i++) {
var cookiename = "answer" + i;
// get content of cookie (is array of objects)
var answer = checkCookie(cookiename);
// iterate through content
for (var j = 0; j < answer.length; j++) {
// get value of object
var val = answer[j].value;
// get the input field (textarea or radio button)
var x = document.getElementById(answer[j].n).getElementsByTagName('input');
// if input is radio, then check the one at position stored in value of object
for (var k = 0; k < x.length; k++) {
if (x[k].type === "radio") {
x[val].checked = true;
// if textarea set its value to the one stored in object value
} else {
x[k].value = val;
}
}
console.log("j: " + j);
}
}
console.log(i);
函数restoreInputs(){
//存储的Cookie数
var=27;
console.log(countCookies);
//遍历所有cookie
对于(变量i=1;i
}我找到了解决方案。问题是我忘记了for循环,因为
var x=document.getElementById(答案[j].n.);getElementsByTagName('input');
可能返回多个元素。因此解决方案如下:
function restoreInputs() {
// number of stored cookies
var countCookies = 27;
console.log(countCookies);
// iterate through all cookies
for (var i = 1; i < countCookies + 1; i++) {
var cookiename = "answer" + i;
// get content of cookie (is array of objects)
var answer = checkCookie(cookiename);
// iterate through content
for (var j = 0; j < answer.length; j++) {
// get value of object
var val = answer[j].value;
// get the input field (textarea or radio button)
var x = document.getElementById(answer[j].n).getElementsByTagName('input');
// if input is radio, then check the one at position stored in value of object
for (var k = 0; k < x.length; k++) {
if (x[k].type === "radio") {
x[val].checked = true;
// if textarea set its value to the one stored in object value
} else {
x[k].value = val;
}
}
console.log("j: " + j);
}
}
console.log(i);
函数restoreInputs(){
//存储的Cookie数
var=27;
console.log(countCookies);
//遍历所有cookie
对于(变量i=1;i
}为什么它应该是18而不是2?您展示的代码示例没有告诉我们在
checkCookie()
中发生了什么,人们可以理解为什么answer
的length
为2。您尝试过console.log(answer)吗
查看您得到的值并将其与您期望的值进行比较?var answer=checkCookie(cookiename)的内容是什么?我的第一个猜测是长度不是18,但需要查看数据才能确定。为什么它应该是18而不是2?您所展示的代码示例没有告诉我们在checkCookie()中发生了什么
到某人可以理解为什么answer
的长度为2的地方。您是否尝试过使用console.log(answer)
查看您得到的值,并将其与您期望的值进行比较?var answer=checkCookie(cookiename)的内容是什么?我的第一个猜测是长度不是18,但需要查看数据才能确定。可能是您的checkCookie返回未定义。请使用内部循环上的断点调试代码。您应该记住的一点是Javascript变量是函数范围的,而不是块范围的。@ctarabusi非常有用的注释,谢谢!我是u现在唱if(Object.prototype.toString.call(answer)=='[Object Array]')
在循环之前检查answer是否是数组。因此,如果answer未定义,它不会崩溃。可能是您的checkCookie返回未定义。使用内部循环上的断点调试代码。您应该记住的一点是Javascript变量是函数范围的,而不是块范围的