2016-05-27 27 views
0

我有一个HTML表单,我想要得到它的所有数据在一个$ _POST会。所以,如果我有一些投入是这样的:jQuery/javascript获取表单数据就像一个帖子阵列

<input type="text" name=r[1][0] value="x"><input type="text" name=r[1][1] value="y"> 

我想获得和对象是这样的:

obj = {r:{1:{0:x,1:y}}} 

能否请你告诉我有什么办法,我可以做到这一点?我尝试serializeArray()..和其他“自定义”解决方案没有成功。

谢谢! :)

+1

http://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery –

+0

感谢您的链接,它帮我找到了我寻找:[GitHub](https://github.com/macek/jquery-serialize-object) –

回答

2

1个星期前,我有几乎相同的问题,我开发了一个函数,可以将输入转换为JavaScript对象。

这也许更多,那么你需要什么,但你可以在此看:

var myObj = {}; 

    function addValueToObj(objet, nom) { 

       var pathBrackets = ""; 
       var regex = /\[([0-9]+)\]$/; 
       nom = nom.split("="); 
       var path = nom[0].split('.'); 

       val = nom.slice(1).join("="); 

    for (var i = 0, tmp = objet; i<path.length-1; i++) { 
        pathBrackets += path[i]+".";  
        if (path[i].match(regex)!=null) { 

         var valindex = path[i].match(regex)[1]; 
         var index = path[i].match(regex).index; 
         var newPath = path[i].substring(index, 1-path[i].length); 

         if (typeof tmp[newPath] == "undefined") { 
          tmp = tmp[newPath] = []; 
          tmp = tmp[valindex] = {}; 
         } else { 
          if (typeof tmp[newPath][valindex] == "undefined") { 
           tmp = tmp[newPath][valindex] = {}; 
          } else { 
           tmp = tmp[newPath][valindex]; 
          } 
         } 
        } else { 
         if (typeof tmp[path[i]] == "undefined") { 
          tmp = tmp[path[i]] = {}; 
         } else { 
          tmp = tmp[path[i]]; 
         } 


     } 

      } 

     tmp[path[i]] = val; 
} 

$(document).ready(function() { 
    $.each($("input"), function() { 
     addValueToObj(myObj, $(this).attr('name')+"="+$(this).val()); 
    }) 
    console.log(myObj); 
}) 

和HTML:

<form> 
x :<input type="text" name="r.1.0" value="x"> 
y :<input type="text" name="r.1.1" value="y"> 
</form> 

结果:

{ 
"r":{ 
    "1":{ 
    "0":"x", 
    "1":"y" 
    } 
    } 
} 

希望它可以帮你。

这里JSFiddle

+0

真的很不错的解决方案,但我更喜欢那种以标准格式保存名称的解决方案。我在原始帖子的评论中添加了一个链接。 –