jQuery:尝试使用serializeArray()

时间:2010-11-18 17:47:25

标签: jquery

我有以下代码。我希望它以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>

此致

哈维

2 个答案:

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