我试图创建一个引用多个表单的对象,我可以JSON.stringify()
通过一个AJAX请求将其发送到验证脚本,但我似乎无法正常命名对象内部的数组,随着数组(表单)数量的增加,该数组应该是递增计数。
即
var images = new Object();
var i = 0;
// loop through every form
$('form').each(function() {
var form = $(this);
images[i].name = form.find('input[name="name"]').val();
images[i].description = form.find('textarea[name="description"]').val();
// etc.
i++;
});
所以,当说完两到三次迭代后完成后(也就是说,它经历了两三种形式),我有一个类似于此的Javascript对象(用伪代码编写,我不完全是太确定它是如何输出的):
images {
0 {
name : 0thImageNameValueHere,
description : 0thImageDescripValueHere,
etc : etc
}
1 {
name : 1stImageNameValueHere,
description : 1stImageDescripValueHere,
etc : etc
}
}
但是,现在,Firebug给了我一个SyntaxError: missing ; before statement
错误,以这一行为中心:
images[i].name = form.find('input[name="name"]').val();
现在,我可以更改'值' images[i].name
对我喜欢的任何事物(images[i].name = 'yes'
),我仍然得到同样的错误。从句法上讲,我不会遗漏任何分号,所以它不可能。是否有可能我没有正确宣布我的对象?
答案 0 :(得分:2)
图像是一个数组([]
)。您的语法不符合这种情况(您期望一个对象)。为数组中的每个项创建一个对象,然后可以为该对象的属性赋值。
此外,您只需使用jQuery提供的index
参数,您就不必创建自己的迭代器。
这样做你想要的:
var images = []; // create an array
$('form').each(function( index ) {
var form = $(this);
// create object with {} object notation
var image = {
name: form.find('input[name="name"]').val(),
description: form.find('textarea[name="description"]').val()
};
images[index] = image; // append object in array position index;
}
答案 1 :(得分:1)
我不知道任何遗漏的半冒号,但您需要在images[i]
上创建一个对象,然后才能在其上分配任何属性。即试试这个:
images[i] = {
name: get('input[name="name"]').val(),
description: get('textarea[name="description"]').val()
};
您还可以使用each()
提供的索引参数:
$('form').each(function(i) { ... }