SerializeArray使用jquery选择多个为json

时间:2017-03-17 14:24:46

标签: jquery

我在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/

如果我输入并选择

  • 动物:狗
  • 植物:树
  • 汽车:saab + volvo

结果是:

{ "first": "dog", "second": "tree", "cars[]": "saab" }

如何更改功能以尊重多重选择。在这种情况下,“saab”和“volvo”出现在json中。

谢谢!

1 个答案:

答案 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'];
        }
      }
    });

https://jsfiddle.net/00fyufde/2/