2011-06-22 100 views

回答

6

在一般情況下,不要使用JS數組的「關聯數組」。使用普通的對象:

var array_products = {}; 

這就是爲什麼$.each不起作用:jQuery的承認,你傳遞一個陣列並且只遍歷數值性能。所有其他人將被忽略。

一個數組應該只有數字鍵的條目。您可以分配字符串鍵,但許多功能不會考慮它們。


更好:

當你使用jQuery,您可以使用jQuery.param[docs]進行序列化。您只需構建適當的輸入數組:

var array_products = []; // now we need an array again 
$('.check_product:checked').each(function(i, obj) { 
    // index and value 
    var num = $(obj).next().val(); 
    var label = $(obj).next().next().attr('data-label'); 
    // build array 
    if((num > 0) && (typeof num !== undefined)) { 
     array_products.push({name: label, value: num}); 
    }  
}); 

var serialized_products = $.param(array_products); 

無需實現您自己的URI編碼函數。

DEMO


最佳:

如果你給的輸入欄適當name

<input name="sky_blue" class="percent_product" type="text" value="20" /> 

你甚至可以利用.serialize()[docs],大大降低量代碼(我用next adjacent selector [docs]):

var serialized_products = $('.check_product:checked + input').serialize(); 

(它將包括0值雖然)。

DEMO

+0

非常感謝! –

2

JSON.stringify(object)

一點題外話沒有關聯數組,只有對象。

使用json-js支持舊版瀏覽器,如IE6和IE7

+0

是不是JSON.stringify只適用於更現代的瀏覽器?除非你包含一個腳本引用到[json2.js](https://github.com/douglascrockford/JSON-js)? –

+0

@AshClarke取決於您對現代瀏覽器的定義。它受到所有當前和最近瀏覽器的支持。如果你需要_legacy_支持使用json2(我已經添加了鏈接) – Raynos

+0

@Raynos不會'let arr = []; a ['foo'] ='酒吧'; JSON.stringify(a);'將其字符串化爲'[]' – ShrekOverflow