我在SO上找到了这个很棒的函数来序列化表单(稍微修改一下)。
function getFormData($form){
var unindexed_array = $form.serializeArray();
for(var i in unindexed_array) {
if(unindexed_array.hasOwnProperty(i)) {
$('[name="'+unindexed_array[i]['name']+'"][value="'+unindexed_array[i]['value']+'"]').each(function() {
$(this).attr('checked', true);
})
}
}
var indexed_array = {};
$.map(unindexed_array, function(n, i){
if($.trim( n['value'] ).length)
indexed_array[n['name']] = n['value'];
});
return (!$.isEmptyObject(indexed_array) ? JSON.stringify(indexed_array, null, 2) : '');
}
这适用于输入。不幸的是没有多次选择。 在这里找到一个工作小提琴:https://jsfiddle.net/t_book/00fyufde/
如果我输入并选择
结果是:
{ "first": "dog", "second": "tree", "cars[]": "saab" }
如何更改功能以尊重多重选择。在这种情况下,“saab”和“volvo”出现在json中。
谢谢!
答案 0 :(得分:1)
尝试更改:
$.map(unindexed_array, function(n, i){
if($.trim( n['value'] ).length){
if(indexed_array[n['name']] !== undefined){
indexed_array[n['name']].push(n['value']);
} else if(n['name'] !== undefined && n['name'].indexOf('[]') > -1){
indexed_array[n['name']] = new Array(n['value']);
} else {
indexed_array[n['name']] = n['value'];
}
}
});