1

我正在尝试创建一个引用多个表单的对象,我可以JSON.stringify()通过单个 AJAX 请求将这些表单发送到验证脚本,但我似乎无法正确命名对象内的数组,这应该是一个递增的随着数组(表格)数量的增加而计数。

IE

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();

现在,我可以将 'value' 更改为images[i].name我喜欢的任何东西 ( images[i].name = 'yes'),但我仍然得到同样的错误。从语法上讲,我没有遗漏任何分号,所以不可能这样。是否有可能我没有正确声明我的对象?

4

2 回答 2

2

图像是一个数组 ( [])。您的语法不符合这种情况(您期望一个对象)。为数组中的每个项目创建一个对象,然后您可以为该对象的属性分配值。

此外,您可以只使用indexjQuery 提供的参数,您不必创建自己的迭代器。

这可以满足您的要求:

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的更多信息,请参阅。

于 2013-03-12T10:23:49.100 回答
1

我不知道任何缺少的分号,但是您需要在images[i]为其分配任何属性之前创建一个对象。即试试这个:

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

您还可以使用由提供的 index 参数each()

$('form').each(function(i) { ... }
于 2013-03-12T10:16:58.290 回答