在Javascript / jQuery中动态添加变量名称作为对象的一部分

时间:2013-03-12 10:10:55

标签: javascript jquery object

我试图创建一个引用多个表单的对象,我可以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'),我仍然得到同样的错误。从句法上讲,我不会遗漏任何分号,所以它不可能。是否有可能我没有正确宣布我的对象?

2 个答案:

答案 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;
}

有关JSON WIKI对象的更多信息,请参阅。 有关数组W3Schools的更多信息,请参阅。

答案 1 :(得分:1)

我不知道任何遗漏的半冒号,但您需要在images[i]上创建一个对象,然后才能在其上分配任何属性。即试试这个:

images[i] = { 
    name: get('input[name="name"]').val(),
    description: get('textarea[name="description"]').val()
};

您还可以使用each()提供的索引参数:

$('form').each(function(i) { ... }