2013-05-12 135 views
3

我是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; });
});

上運行過程中出現的上述HTML我正的輸出{"name":"text5","content":"sdsd"}

只是最終的文本字段。我知道我錯了某個地方。有人可以幫我解決它。在此先感謝

回答

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(); 
}; 
+0

太謝謝你了。它工作完美.. – ani 2013-05-12 08:49:23