Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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 遍历对象数组以填充输入字段_Javascript_Arrays_For Loop - Fatal编程技术网

Javascript 遍历对象数组以填充输入字段

Javascript 遍历对象数组以填充输入字段,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我目前正在为Google Forms开发一个解决方案,它可以将所有输入存储在cookies中,这样用户就可以在不同的时间进行调查。 目前,我能够通过使用JSON.stringify(),将所有问题(问题是一个包含:周围div的id、required、userinput的对象)存储在cookie中。我还能够读取和解析cookie,从而获得所有问题对象的数组 现在我想填充所有字段或检查所有有值的单选按钮。 我的问题是,内部for循环只进行了2次迭代,但它应该进行18次。你知道什么可能是错误的吗 fu

我目前正在为Google Forms开发一个解决方案,它可以将所有输入存储在cookies中,这样用户就可以在不同的时间进行调查。 目前,我能够通过使用
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变量是函数范围的,而不是块范围的