如何获取与数组具有相同名称标签的所有输入字段(jQuery)

时间:2019-06-27 14:51:04

标签: javascript jquery arrays dictionary

是否可以获得与数组相同名称标签的所有输入字段,并使用方括号中的字符串作为键? 示例:

<input type="hidden" name="hidden[idPub]" disabled="disabled">
<input type="hidden" name="hidden[idPri]" disabled="disabled">  
<textarea name="hidden[description]" style="height:75px;length:auto;display:block;" class="form-control" >'</textarea>

结果应该是这样的:

hidden => 
    "idPub" => 123,
    "idPri" => 321,
    "description" => 'test'

我的实际解决方案:

var formData = [];
        $("input[name^='hidden[']").each(function()
        {
            formData[$(this).attr('name').replace('hidden[','').replace(']', '')] = $(this).val();
        });

谢谢。

3 个答案:

答案 0 :(得分:1)

因为您使用的是命名键,所以formData应该是对象,而不是数组。

var formData = {};
//             ^^

此外,您的选择器仅定位到<input>个元素;您还需要为<textarea>添加选择器。

$("input[name^='hidden['],textarea[name^='hidden[']")
//                       ^^^^^^^^^^^^^^^^^^^^^^^^^^

var formData = {};
$("input[name^='hidden['],textarea[name^='hidden[']").each(function() {
  formData[$(this).attr('name').replace('hidden[', '').replace(']', '')] = $(this).val();
});

console.log(formData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="hidden" name="hidden[idPub]" value="123">
<input type="hidden" name="hidden[idPri]" value="321">
<textarea name="hidden[description]">test</textarea>

答案 1 :(得分:0)

const formData = {};

const elements = Array.from(document.querySelectorAll("input[type=hidden]"));

elements.forEach(el => {
    const key = el.getAttribute('name');
    var matches = key.match(/\[(.*?)\]/);

  if (matches) {
    var val = matches[1];
    formData[val] = el.value;
  }
});

console.log(formData);

答案 2 :(得分:0)

您也可以使用正则表达式来做到这一点。

var hidden = {};
$('input,textarea').filter(function(){
  return this.name.match(/(hidden)\[(.*?)\]/g);
}).each(function() {
  hidden[$(this).attr('name').replace('hidden[', '').replace(']', '')] = $(this).val();
});

console.log(hidden);

在此处查看:How to get all input-fields with same name-tag as array (jQuery)