是否可以获得与数组相同名称标签的所有输入字段,并使用方括号中的字符串作为键? 示例:
<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();
});
谢谢。
答案 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)