(JS)For循环,组合对象和int var

时间:2013-10-31 12:08:48

标签: json object for-loop var

我正在加载一个JSON文件,其中包含以下内容:

"forget": {
    "form_elements": 2,

    "input1": {
        "type": "text",
        "placeholder": "E-mail adres invullen...",
        "value": ""
    },
    "input2": {
        "type": "submit",
        "placeholder": "",
        "value": "Opvragen"
    }
}

我正在创建这个JSON内容的div,一切正常(有更多的JSON内容,但这只与我的问题相关)。

创建元素后,我使用这个循环遍历输入:

    for (var i = 1; i <= data[get].form_elements; i++) {
        var input = data[get].input+i;

        $overlay.append( $("<input />").attr({
            type: input.type,
            placeholder: input.placeholder,
            value: input.value
        }));
    }

Overlay是我刚刚创建的。 使用此代码,插入了2个基本输入字段,没有类型,占位符和值。那是因为这段代码不起作用:

var input = data[get].input+i;

但是当我使用它时:

var input = data[get].input1;
var input = data[get].input2;

一切正常。

当我在循环中记录“i”变量时,会看到数字 升序。

我还认为我必须将它转换为带有 .toString 的字符串,但这也不起作用。

所以我的问题是,为什么这不起作用?我能做些什么呢? 我希望我能很好地解释我的问题。谢谢你。

1 个答案:

答案 0 :(得分:2)

你这样做的方式并不是一个好方法:你试图用对象模拟一个数组。

首先,如果您执行此操作,您的代码应该可以运行:

var input = data[get]["input"+i];

其次,我建议您将内容更改为:

          "forget": {
            "input1": {
                    "type": "text",
                    "placeholder": "E-mail adres invullen...",
                    "value": ""
            },
            "input2": {
                    "type": "submit",
                    "placeholder": "",
                    "value": "Opvragen"
            }
    }

你的循环应该是:

for (var key in data[get]) {
    var input = data[get][key];
    ...
}

如果你真的想要使用数组,你应该将它作为你的JSON数据:

            "forget":  [
                    {
                            "type": "text",
                            "placeholder": "E-mail adres invullen...",
                            "value": ""
                    },
                    {
                            "type": "submit",
                            "placeholder": "",
                            "value": "Opvragen"
                    }
            ];
            for(var i = 0, len = data[get].length; i < len ; i++){
                                    var input = data[get][i];
                ...
            }

我建议你选择两种方法中的一种。

数组和对象的操作方式不同,因此您必须根据需要选择使用哪种类型。