我有以下代码。我希望它以JSON格式显示字段的值和名称,但只显示:
[object Object],[object 对象],[对象对象],[对象 对象],[对象对象]
<script type="text/javascript">
$(document).ready(function() {
$('#forma').submit(function() {
alert($(this).serializeArray());
return false;
});
});
</script>
<form id="forma">
<div><input type="text" name="a" value="1" id="a" /></div>
<div><input type="text" name="b" value="2" id="b" /></div>
<div><input type="hidden" name="c" value="3" id="c" /></div>
<div>
<textarea name="d" rows="8" cols="40">4</textarea>
</div>
<div><select name="e">
<option value="5" selected="selected">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select></div>
<div>
<input type="checkbox" name="f" value="8" id="f" />
</div>
<div>
<input type="submit" name="g" value="Submit" id="g" />
</div>
</form>
此致
哈维
答案 0 :(得分:5)
那是因为.serializeArray()
返回一个像这样的对象数组:
[{name: "name", value: "value"}....]
要获得您可以看到的字符串,请使用.serialize()
,如下所示:
alert($(this).serialize());
这与在数组上调用$.param()
相同,如下所示:
alert($.param($(this).serializeArray()));
要清楚,这是数据字符串的格式,例如,如果要将其序列化为JSON,则应自行使用JSON.stringify()
。
答案 1 :(得分:0)
对于那些想要更实用的代码的人:
fData=$("#myForm").serializeArray(); // or $("#myDiv :input").serializeArray();
//alert(fData.length) // how many inputs got picked up
var msg="";
for(var i=0;i<fData.length;i++){
var raKy=Object.keys(fData[i]);
msg+="\n"+raKy[0]+":"+eval("fData[i]."+raKy[0])+" "+raKy[1]+":"+eval("fData[i]."+raKy[1]);
}
alert(msg);
您可以使用注释掉的代码将范围限制为表单中的div