Javascript 使用jQuery从输入获取关联数组

Javascript 使用jQuery从输入获取关联数组,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我希望使用jQuery(或直接在JS中)从具有多个文本输入的表单中创建一个关联数组。由此: <form> <input type="text" name="name[13]" value="test 1" /> <input type="text" name="name[14]" value="test 2" /> <input type="text" name="new_name[]" value="test 3" /> </form>

我希望使用jQuery(或直接在JS中)从具有多个文本输入的表单中创建一个关联数组。由此:

<form>
<input type="text" name="name[13]" value="test 1" />
<input type="text" name="name[14]" value="test 2" />
<input type="text" name="new_name[]" value="test 3" />
</form>
我尝试使用jQuery的serialize函数,它只适用于像新的数组一样的数组

谢谢你的帮助! Kevin

如果您添加以下代码并提交表单,您(在Firebug或Chrome控制台中)会得到什么输出:

$('form').submit(function() {
  console.log($(this).serializeArray());
  return false;
});

编辑:这是为了更详细地了解OP的问题。

您可以尝试以下方法:

var output = [];

$('input[type="text"]').each(function() {

  var s = $(this).attr('name').match(/(.*)[(.*)]/);

  var found = false;
  for(x in output) {
    if(x == s[0]) {
      output[x].push({s[1]: $(this).val()});
      found = true;
    }
  }

  if(!found) {
    output[s[0]] = [{s[1]: $(this).val()}];
  }

});

下面是我将如何做到这一点(在这种特殊情况下,我将避免使用jQuery)

window.onload=function(){/$(document).ready(…)如果您已经在使用jQuery
var str,str2,arr1=[],arr2=[],inputs=document.getElementsByTagName(“input”);

对于(var i=0,len=inputs.length;iHi,我注意到末尾的“Kevin”,请注意StackOverflow中不允许签名(在评论和帖子中)。你的函数没有保留我在html代码(13和14)中设置的内存索引。我需要这些索引…@Kevin我已经更新了我的答案。顺便说一下,
new_name[]
如果索引为空,您希望发生什么?通过您的编辑,我现在遇到了与techfoobar解决方案相同的问题(我有一个包含很多表单的页面(一个包含很多“对象”的管理页面,我想在ajax中直接修改它。我无法传递审阅每个输入)。我有一个包含很多表单的页面(这是一个管理页面,有很多我想在ajax中直接修改的“对象”。我无法通过查看每个输入。很抱歉延迟。下面是我得到的:数组([0]=>Array([name]=>ean[3967][value]=>3700275175119)[1]=>Array([name]=>ean[5155][value]=>1234)[2]=>Array([name]=>ean[][value]=>)(很抱歉,格式太差了。我不知道在评论邮件时如何发布格式代码)。
var output = [];

$('input[type="text"]').each(function() {

  var s = $(this).attr('name').match(/(.*)[(.*)]/);

  var found = false;
  for(x in output) {
    if(x == s[0]) {
      output[x].push({s[1]: $(this).val()});
      found = true;
    }
  }

  if(!found) {
    output[s[0]] = [{s[1]: $(this).val()}];
  }

});
window.onload=function(){//$(document).ready(...) if you already using jQuery
    var str,str2,arr1=[],arr2=[],inputs=document.getElementsByTagName("input");
    for(var i=0,len=inputs.length;i<len;i++){
        str=inputs[i].name;
        if(inputs[i].type=='text'&&str.charAt(str.length-1)=="]"){
            if(str.substr(0,5)=="name["){
                str2=parseInt(str.split("name[")[1].split("]")[0]);
                if(str2!=NaN){
                    arr1[str2]=inputs[i].value;
                    continue;//we move to the next i
                }//else
            }
            if(str.substr(0,9)=="new_name["){
                str2=parseInt(str.split("new_name[")[1].split("]")[0]);
                if(str2!=NaN){
                    arr2[str2]=inputs[i].value;
                }//else
            }
        }
    }
    alert(arr1[13]);//test 1
}