大家知道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多线程初见

    . 三种创建线程的方法 //第一种 NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(doAc ...

  2. iOSQuartz2D-03-定制个性头像

    效果图 将一张图片剪切成圆形 在图片周围显示指定宽度和颜色的边框 实现思路 效果图中主要由不同尺寸的两大部分组成 蓝色的背景区域,尺寸等于图片的尺寸加上边框的尺寸 图片区域,尺寸等于图片的尺寸 绘制一 ...

  3. Profile 分析 Erlang 虚拟机源码时要注意的一个问题

    最近用 Intel Vtune 剖析 Erlang 虚拟机的运行,想看看那些函数和语句耗时最多,遇到一个小问题,那就是 Vtune 给出的源码和汇编码对应有问题.这个问题在 profile 或 deb ...

  4. nodejs创建一个HTTP服务器 简单入门级

    const http = require('http');//请求http.createServer(function(request, response){    /*createServer该函数 ...

  5. Mongo 的相关增删改查

    1,Mongod 下载安装,请看https://www.mongodb.com/download-center 2,插入语句: MongoDB后台管理 Shell 如果你需要进入MongoDB后台管理 ...

  6. Android开发之 Android 的基本组件的概述

    Android是一个为组件化而搭建的平台,它的应用是由一些零散的有联系的组件组成,并通过AndroidManifest.xml文件 把它们绑定起来. Android常用的组件有: Activity(活 ...

  7. C标准头文件<assert.h>

    <assert.h>定义了两个用来调试程序的宏: assert和NDEBUG,assert用来判断表达式是否为真,如果为真继续执行,如果为假,向stderr输出一条错误消息,并调用< ...

  8. mod_rewrite

    一.简介 http://www.07fly.net/a/wangluobiancheng/Phpbiancheng/201501/58393.html   二.实现原理:       只有当用户的WE ...

  9. iptables 详解

    一:前言   防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...

  10. 轮式移动机器人QBot的使用

    夏季学期选了智能移动机器人导论课程,开始接触移动机器人.作为一门面向大二.大三学生的一门导论式的课程,课程作业其实并不太难,然而我们为了完成课程作业,前前后后还是弄了好几个星期,以至放了暑假都还要和Q ...