大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。

我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:

  1. /**
  2. * 重置form表单
  3. * @param formId  form的id
  4. */
  5. function resetQuery(formId){
  6. var fid = "#" + formId;
  7. var str = $(fid).serialize();
  8. //str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04
  9. var ob= strToObj(str);
  10. alert(ob.startdate);//2012-02-01
  11. }
  12. function strToObj(str){
  13. str = str.replace(/&/g,"','");
  14. str = str.replace(/=/g,"':'");
  15. str = "({'"+str +"'})";
  16. obj = eval(str);
  17. return obj;
  18. }

个人感觉这样做有bug。

我的方法是,先用serializeArray序列化为数组,再封装为Json对象。

下面是表单:

  1. <form id="myForm" action="#">
  2. <input name="name"/>
  3. <input name="age"/>
  4. <input type="submit"/>
  5. </form>

Jquery插件代码如下:

  1. (function($){
  2. $.fn.serializeJson=function(){
  3. var serializeObj={};
  4. $(this.serializeArray()).each(function(){
  5. serializeObj[this.name]=this.value;
  6. });
  7. return serializeObj;
  8. };
  9. })(jQuery);

下面测试一下:$("#myForm").bind("submit",function(e){

  1. e.preventDefault();
  2. console.log($(this).serializeJson());
  3. });

测试结果:

输入a,b提交,得到序列化结果

{age: "b",name: "a"}

上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:

  1. (function($){
  2. $.fn.serializeJson=function(){
  3. var serializeObj={};
  4. var array=this.serializeArray();
  5. var str=this.serialize();
  6. $(array).each(function(){
  7. if(serializeObj[this.name]){
  8. if($.isArray(serializeObj[this.name])){
  9. serializeObj[this.name].push(this.value);
  10. }else{
  11. serializeObj[this.name]=[serializeObj[this.name],this.value];
  12. }
  13. }else{
  14. serializeObj[this.name]=this.value;
  15. }
  16. });
  17. return serializeObj;
  18. };
  19. })(jQuery);

这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,"连接的字符串或者其他形式,请自行修改相应代码。

测试如下:

表单:

  1. <form id="myForm" action="#">
  2. <input name="name"/>
  3. <input name="age"/>
  4. <select multiple="multiple" name="interest" size="2">
  5. <option value ="interest1">interest1</option>
  6. <option value ="interest2">interest2</option>
  7. <option value="interest3">interest3</option>
  8. <option value="interest4">interest4</option>
  9. </select>
  10. <input type="checkbox" name="vehicle" value="Bike" /> I have a bike
  11. <input type="checkbox" name="vehicle" value="Car" /> I have a car
  12. <input type="submit"/>
  13. </form>

测试结果:

{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}

Jquery 将表单序列化为Json对象的更多相关文章

  1. jQuery form表单序列化为JSON对象!

    /* 来源于博客园http://www.cnblogs.com/nixil/archive/2010/12/08/1900745.html */ function paramString2obj(se ...

  2. 023-将表单序列化为json对象

    使用jQuery将表单序列化为json对象,其中serializeJson方法的名字任意,serializeArray()这个jQuery提供的方法.this指的就是谁调用了这个方法. $.fn.se ...

  3. jQuery表单验证以及将表单序列化为json对象小练习

    jquery表单验证(非实时验证),同时,将表单序列化为json对象提交表单. <!DOCTYPE html> <html lang="en"> <h ...

  4. 将表单序列化为JSON对象

    将表单序列化为JSON对象的工具方法: $(function() { //工具方法,可以将指定的表单中的输入项目序列化为JSON数据 $.fn.serializeJson = function() { ...

  5. js 表单序列化为json对象

    $.fn.serializeJson = function () { var o = {}; var a = this.serializeArray(); $.each(a, function () ...

  6. From 表单序列化为json对象(代码片段)

    $.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); $(array).each(f ...

  7. jquery扩展方法(表单数据格式化为json对象)

    1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...

  8. form表单序列化为json格式数据

    在web开发过程中,经常遇到将form序列化不能格式的字符串提交到后台,下面就介绍怎样将form表单序列化为json字符串. 首先,是扩展的jquery序列化插件,依赖jquery.经测试,这段代码可 ...

  9. 拓展jQuery的serialize(),将form表单转化为json对象

    jQuery 的 serialize() 方法经常会报 Uncaught TypeError: JSON.serializeObject is not a function 的错误, 原装的方法真的一 ...

随机推荐

  1. IOS 二维码生成

    这篇博客将会介绍二维码的生成. 由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码. 第一部分 第一部分是二维码的简单生成没有其他重点介绍. 效果图 代码部分 // // ViewC ...

  2. CGContextRef使用简要教程

    CGContextRef使用简要教程 Graphics Context是图形上下文,也可以理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个 ...

  3. Python yield 使用浅析(iterable generator )

    http://blog.csdn.net/preterhuman_peak/article/details/40615201 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递 ...

  4. 存储过程之七—java代码调用

    一.简介 jdbc调用存储过程与调用一般的sql语句有些差别.jdbc调用一般的sql语句的时候,返回的是结果集,或是sql语句后是否执行成功的标记量.而存储过程返回的可以是结果集,输出参数.返回状态 ...

  5. jQuery Form 表单提交插件----Form 简介,官方文档,官方下载地址

     一.jQuery Form简介 jQuery Form插件是一个优秀的Ajax表单插件,可以非常容易地.无侵入地升级HTML表单以支持Ajax.jQuery Form有两个核心方法 -- ajaxF ...

  6. linux命令详解之挂载光驱的方法

    linux的硬件设备在/dev目录下,光驱也是其中./dev/cdrom表示光驱,挂载光驱的方法如下(以root身份): 代码如下: mkdir /mnt/cdrommount  -t auto  - ...

  7. 排序(qsort sort的使用)

    前情:因平常写代码是常将比较函数弄混(写好了排序还要确认一下-.-!),还是写篇博客,方便以后查阅 C语言qsort函数对int类型数组排序: #include "stdio.h" ...

  8. C++ 数组长度 以及 数组名作为参数传递给函数 以及 为什么不在子函数中求数组长度

    在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有 ...

  9. HDU 4777 Rabbit Kingdom --容斥原理+树状数组

    题意: 给一个数的序列,询问一些区间,问区间内与区间其他所有的数都互质的数有多少个. 解法: 直接搞有点难, 所谓正难则反,我们求区间内与其他随便某个数不互质的数有多少个,然后区间长度减去它就是答案了 ...

  10. POJ 3255 Roadblocks --次短路径

    由于次短路一定存在,则可知次短路一定是最短路中某一条边不走,然后回到最短路,而且只是一条边,两条边以上不走的话,就一定不会是次短路了(即以边换边才能使最小).所以可以枚举每一条边,算出从起点到这条边起 ...