2017-03-17 27 views
0

我發現SO上的這個很棒的函數來序列化表單(修改了一下)。SerializeArray使用jQuery作爲json選擇多個

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" } 

如何更改功能以尊重多重選擇。在這種情況下,「薩博」和「沃爾沃」出現在JSON中。

謝謝!

回答

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/