(JS) Для цикла объедините object и int var
Я загружаю JSON-файл с таким содержимым:
"forget": {
"form_elements": 2,
"input1": {
"type": "text",
"placeholder": "E-mail adres invullen...",
"value": ""
},
"input2": {
"type": "submit",
"placeholder": "",
"value": "Opvragen"
}
}
Я создаю div этого контента JSON, который все работает нормально (есть еще контент 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
}));
}
Наложение - это я только что создал. С этими кодами вставляются 2 основных поля ввода без типа, заполнителя и значения. Это потому, что этот код не работает:
var input = data[get].input+i;
Но когда я использую это:
var input = data[get].input1;
var input = data[get].input2;
Все отлично работает
Когда я записываю переменную "i" в цикле, вижу, что число возрастает.
Я также подумал, что мне придется преобразовать его в строку с .toString, но это также не работает.
Итак, мой вопрос, почему это не работает? И что я могу с этим поделать? Надеюсь, я хорошо объяснил свою проблему. Спасибо вперед.
1 ответ
То, как вы это делаете, не очень хороший способ: вы пытаетесь эмулировать массив, используя объект.
Прежде всего, ваш код должен работать, если вы делаете это:
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];
...
}
Я рекомендую вам выбрать один из двух методов.
Массив и объекты не обрабатываются одинаково, поэтому вы должны выбрать, какой тип использовать в соответствии с вашими потребностями.