使用jquery迭代数组只返回最后一个对象

时间:2013-05-12 07:54:11

标签: javascript jquery

我是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"}

只是最后的文字字段。我知道某处错了。有人可以帮我解决它。提前谢谢

1 个答案:

答案 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;
};

http://jsfiddle.net/kxM3e/

使用jQuery map方法:

$.fn.serializeObject = function () {
    return this.find('input, textarea, select').map(function(){
        return { name: this.name, content: this.value };
    }).get();
};