【发布时间】:2011-09-20 06:47:27
【问题描述】:
我需要序列化一个关联的 JavaScript 数组。 它是一种简单形式的产品和一个数值,但刚刚构建的数组似乎是空的。
【问题讨论】:
标签: javascript jquery arrays forms
我需要序列化一个关联的 JavaScript 数组。 它是一种简单形式的产品和一个数值,但刚刚构建的数组似乎是空的。
【问题讨论】:
标签: javascript jquery arrays forms
一般来说,不要将 JS 数组用于“关联数组”。使用普通对象:
var array_products = {};
这就是$.each 不起作用的原因:jQuery 识别出您传递了一个 array 并且只是在迭代 numerical 属性。其他所有将被忽略。
一个数组应该只有带有数字键的条目。您可以分配字符串键,但很多函数不会考虑它们。
更好:
当您使用 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 编码功能。
最佳:
如果你给输入字段一个正确的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 值)。
【讨论】:
您可以使用JSON library(或本机JSON object,如果可用)对其进行序列化。
var serialised = JSON.stringify(obj);
【讨论】: