2013-03-12 61 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

相關問題