2013-03-12 55 views
1

我试图创建一个引用多个表单的对象,我可以用JSON.stringify()通过单个AJAX请求发送到验证脚本,但是我可以' t似乎正确地命名了对象内的数组,这应该是随着数组(表单)数量的增加而增加的数量。在Javascript/jQuery中动态添加变量名称作为对象的一部分

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

您将图像定义为对象,但是不是带有对象的数组? – 2013-03-12 10:19:54

+0

我并不完全确定Javascript中的形式语言,但如果它是PHP,它将等同于多维关联数组,图像属性形成key =>值对。 – ReactingToAngularVues 2013-03-12 10:25:14

+0

只要你的索引是一个int,你就可以在javascript中使用,如果你想使用字符串作为键,你必须使用一个对象。 – Tetaxa 2013-03-12 10:28:09

回答

1

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

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

您还可以使用each()提供的指标参数:

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

这似乎是工作......我可以传递给'JSON.stringify',然后到'$ .ajax',另一端(PHP脚本)使用'json_decode();'获得一个数组? – ReactingToAngularVues 2013-03-12 10:30:54

+0

是的,这将工作。 – Tetaxa 2013-03-12 10:32:17

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

+0

'var images = []; var images = {};和var images = new Object()'?我仍然可以传递这个'数组'到JSON.stringify()成功吗? – ReactingToAngularVues 2013-03-12 10:32:30

+0

数组是一个任何[1,2,3]列表,但不支持键值对。对象支持这些,请参阅我的更新示例,了解如何使用对象表示法设置这些键值对 – 2013-03-12 10:40:22

相关问题