我是jquery的新手,我认为这只是一个基本问题。 `
<input type="text" name="text1" value=""></input>
<input type="text" name="text2" value=""></input>
<input type="text" name="text3" value=""></input>
<input type="text" name="text4" value=""></input>
<input type="text" name="text5" value=""></input>
<input type="submit" value="submit"></input>
<pre id="result">
</pre>
</form>`
这是我的html表单,我正在使用以下jquery函数来生成json对象
$.fn.serializeObject = function()
{
var o = {};
var d={};
var a = this.serializeArray();
$.each(a, function(i,n) {
o['name'] = n['name'];
o['content'] =(n['value']);
});
return o;
};
$(function() {
$('form').submit(function() {
$('#result').text(JSON.stringify($('form').serializeObject()));
return false;
});
});
在runnig上面的html我得到输出{"name":"text5","content":"sdsd"}
只是最后的文字字段。我知道某处错了。有人可以帮我解决它。提前谢谢
答案 0 :(得分:2)
那是因为你正在覆盖对象的属性并且最后的值获胜,你可以使用数组及其push
方法。
$.fn.serializeObject = function () {
var o = [];
var a = this.serializeArray();
$.each(a, function (i, n) {
o.push({
name: n['name'],
content: n['value']
})
});
return o;
};
使用jQuery map
方法:
$.fn.serializeObject = function () {
return this.find('input, textarea, select').map(function(){
return { name: this.name, content: this.value };
}).get();
};