我有这个问题,我使用serializearray()jquery序列化Form到Json的所有字段。 如果在输入中我输入了name属性,它可以正常工作,但是如果我只想放置ID属性它不起作用。
名称的好功能[名称类似:'#myformnameid']:
function formToJson(nameForm)
{
var jsonForm={};
var queryFrom = $(nameForm).serializeArray();
for (i in queryFrom) {
jsonForm[queryFrom[i].name] = queryFrom[i].value;
}
return jsonForm;
}
我尝试使用attr进行ID解决方案。
function formToJson(nameForm)
{
var jsonForm={};
var queryFrom = $(nameForm).serializeArray();
for (i in queryFrom) {
jsonForm[queryFrom[i].attr("id")] = queryFrom[i].value;
}
return jsonForm;
}
任何想法?
答案 0 :(得分:2)
serializeArray
做的是获取表单输入对象并将它们转换为javascript对象数组。从documentation开始,表单类似于
[
{
name: "a",
value: "1"
},
{
name: "b",
value: "2"
},
{
name: "c",
value: "3"
}
]
您可以按名称或值迭代此数组,就像您正在做的那样,它将返回正确的数据。
您遇到的问题是您不再迭代实际元素,只是来自这些元素的数据。如果您想迭代元素,则需要执行以下操作:
function formToJson(nameForm)
{
var jsonForm={};
$("input", $(nameForm)).each(function(index){
jsonForm[$(this).attr("id")] = this.value;
})
return jsonForm;
}
答案 1 :(得分:-1)
这是一篇很老的帖子,但我想我会添加自己的想法。从下面的链接复制源代码,您将能够向返回的数组添加任何您想要的元素属性。这样你的实现就是jQuery的实现。是的,如果更新了jQuery源代码,您将需要手动更新代码,但这与其他解决方案相同。
https://searchcode.com/codesearch/view/25323764/
var
rbracket = /\[\]$/,
rCRLF = /\r?\n/g,
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
rsubmittable = /^(?:input|select|textarea|keygen)/i,
rcheckableType = /^(?:checkbox|radio)$/i;
$.fn.extend({
customSerializeArray: function() {
return this.map(function() {
// Can add propHook for 'elements' to filter or add form elements
var elements = $.prop(this, 'elements');
return elements ? $.makeArray(elements) : this;
})
.filter(function() {
var type = this.type;
// Use .is(':disabled') so that fieldset[disabled] works
return this.name && !$(this).is(':disabled') &&
rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
(this.checked || !rcheckableType.test(type));
})
.map(function(i, elem) {
var val = $(this).val();
if (val == null) {
return null;
}
if ($.isArray(val)) {
return $.map(val, function(val) {
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
});
}
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
}).get();
}
});