Jquery 将表单序列化为Json对象
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。
我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:
- /**
- * 重置form表单
- * @param formId form的id
- */
- function resetQuery(formId){
- var fid = "#" + formId;
- var str = $(fid).serialize();
- //str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04
- var ob= strToObj(str);
- alert(ob.startdate);//2012-02-01
- }
- function strToObj(str){
- str = str.replace(/&/g,"','");
- str = str.replace(/=/g,"':'");
- str = "({'"+str +"'})";
- obj = eval(str);
- return obj;
- }
个人感觉这样做有bug。
我的方法是,先用serializeArray序列化为数组,再封装为Json对象。
下面是表单:
- <form id="myForm" action="#">
- <input name="name"/>
- <input name="age"/>
- <input type="submit"/>
- </form>
Jquery插件代码如下:
- (function($){
- $.fn.serializeJson=function(){
- var serializeObj={};
- $(this.serializeArray()).each(function(){
- serializeObj[this.name]=this.value;
- });
- return serializeObj;
- };
- })(jQuery);
下面测试一下:$("#myForm").bind("submit",function(e){
- e.preventDefault();
- console.log($(this).serializeJson());
- });
测试结果:
输入a,b提交,得到序列化结果
{age: "b",name: "a"}
上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:
- (function($){
- $.fn.serializeJson=function(){
- var serializeObj={};
- var array=this.serializeArray();
- var str=this.serialize();
- $(array).each(function(){
- if(serializeObj[this.name]){
- if($.isArray(serializeObj[this.name])){
- serializeObj[this.name].push(this.value);
- }else{
- serializeObj[this.name]=[serializeObj[this.name],this.value];
- }
- }else{
- serializeObj[this.name]=this.value;
- }
- });
- return serializeObj;
- };
- })(jQuery);
这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,"连接的字符串或者其他形式,请自行修改相应代码。
测试如下:
表单:
- <form id="myForm" action="#">
- <input name="name"/>
- <input name="age"/>
- <select multiple="multiple" name="interest" size="2">
- <option value ="interest1">interest1</option>
- <option value ="interest2">interest2</option>
- <option value="interest3">interest3</option>
- <option value="interest4">interest4</option>
- </select>
- <input type="checkbox" name="vehicle" value="Bike" /> I have a bike
- <input type="checkbox" name="vehicle" value="Car" /> I have a car
- <input type="submit"/>
- </form>
测试结果:
{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}
Jquery 将表单序列化为Json对象的更多相关文章
- jQuery form表单序列化为JSON对象!
/* 来源于博客园http://www.cnblogs.com/nixil/archive/2010/12/08/1900745.html */ function paramString2obj(se ...
- 023-将表单序列化为json对象
使用jQuery将表单序列化为json对象,其中serializeJson方法的名字任意,serializeArray()这个jQuery提供的方法.this指的就是谁调用了这个方法. $.fn.se ...
- jQuery表单验证以及将表单序列化为json对象小练习
jquery表单验证(非实时验证),同时,将表单序列化为json对象提交表单. <!DOCTYPE html> <html lang="en"> <h ...
- 将表单序列化为JSON对象
将表单序列化为JSON对象的工具方法: $(function() { //工具方法,可以将指定的表单中的输入项目序列化为JSON数据 $.fn.serializeJson = function() { ...
- js 表单序列化为json对象
$.fn.serializeJson = function () { var o = {}; var a = this.serializeArray(); $.each(a, function () ...
- From 表单序列化为json对象(代码片段)
$.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); $(array).each(f ...
- jquery扩展方法(表单数据格式化为json对象)
1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...
- form表单序列化为json格式数据
在web开发过程中,经常遇到将form序列化不能格式的字符串提交到后台,下面就介绍怎样将form表单序列化为json字符串. 首先,是扩展的jquery序列化插件,依赖jquery.经测试,这段代码可 ...
- 拓展jQuery的serialize(),将form表单转化为json对象
jQuery 的 serialize() 方法经常会报 Uncaught TypeError: JSON.serializeObject is not a function 的错误, 原装的方法真的一 ...
随机推荐
- win7共享文件夹给局域网
1.设置共享 2.关闭"需要密码访问"
- XMLHttp小手册,原生ajax参考手册
个人做java ee开发,在一般的公司里上班,做的是一般的网站. 1.如果经常使用jquery等框架进行异步调用,最主要的不是了解jquery怎么用,而是了解http协议. 2.为了了解http协议, ...
- 关于移动端click事件绑定的一个细节
click是最常见的点击事件,但是对于移动终端,比如手机,一般都是以touch事件代替的,而click事件在手机也是生效的,只是会有1-2秒左右的延迟,那么当你想要用click而非touch事件的时候 ...
- Effective Java 44 Write doc comments for all exposed API elements
Principle You must precede every exported class, interface, constructor, method, and field declarati ...
- .NET 反射的使用
1.根据类名获取类实例 string className = "Company.BigProgram.BLL.TestClass"; Type type = Type.GetTyp ...
- SeekableByteChannel 和 FileChannel
Java7中引入了SeekableByteChannel接口,允许我们定位到文件的任意位置进行读写.注意这里的写,不是新增式的插入,而是覆盖,当然在文件末尾的写,是新增. java.nio.chann ...
- MySQL单机多实例安装并配置主从复制
单机多实例据说可以最大程度提高硬件使用,谁知道呢,但是以前的公司喜欢这样搞,我最近也在学习复制什么的,电脑搞不起两台虚拟机,刚好单机多实例可以解救我.下面就说说步骤. 承上文http://www.cn ...
- Github学习之路-小试牛刀,练习Git 的基本操作
一.下子windows客户端. Git 客户端下载地址:http://msysgit.github.io/ 二.打开Git Bash 命令行操作界面. 安装完成后,在开始菜单里找到“Git”-> ...
- 入门 ARM 汇编(一)—— 知识铺垫
我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民.我想有一次远行,于细碎流淌的时光与路途之中,观察所有 ...
- hdu 敌兵布阵(线段树之单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...