Jquery 将表单序列化为Json对象

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

 

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

Js代码 复制代码 收藏代码
  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. }
/** 
     * 重置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对象。

 

 

下面是表单:

 

Html代码 复制代码 收藏代码
  1. < form id = "myForm" action = "#" >
  2. < input name = "name" />
  3. < input name = "age" />
  4. < input type = "submit" />
  5. </ form >
<form id="myForm" action="#">
	<input name="name"/>
	<input name="age"/>
	<input type="submit"/>
</form>

 

Jquery插件代码如下:

 

Js代码 复制代码 收藏代码
  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);
(function($){
		$.fn.serializeJson=function(){
			var serializeObj={};
			$(this.serializeArray()).each(function(){
				serializeObj[this.name]=this.value;
			});
			return serializeObj;
		};
	})(jQuery);

 

 

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

Js代码 复制代码 收藏代码
  1. e.preventDefault();
  2. console.log($( this ).serializeJson());
  3. });
		e.preventDefault();
		console.log($(this).serializeJson());
	});

测试结果:

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

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

 

 

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

 

Js代码 复制代码 收藏代码
  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);
(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);

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

 

测试如下:

表单:

 

Html代码 复制代码 收藏代码
  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 >
<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"]}

第五章 TTM 后备管理:5.6系统内存域 系统内存域由 TTM 内置资源管理器管理,通过 ttm_tt 承载页信息,依赖 ttm_pool 提供物理页。ttm_tt 管理页数组、缓存属性与状态标志,支持外部页与换出机制。初始化分 ttm_tt_init 与 ttm_sg_tt_init,生命周期包括创建、填充、释放与销毁。页池针对 write-combined、uncached 及一致性 DMA 分配的页进行缓存,提升性能并减少 TLB 刷新。分配时高阶优先、批量设置缓存属性,回收时清零后归还池中,确保高效复用。 阅读详情

相关推荐

帆软FineBI考试题

Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。

Davina_yu的博客 1608

基于jQuery.form.js将表单序列化为json对象

基于jQuery.form.js将表单序列化为json对象 jQuery.form.js表单插件,可以让您轻松地在HTML表单中使用AJAX。主要的方法,ajaxForm和ajaxSubmit从表单元素,收集信息,以决定如何管理提交过程。更多方法:formToArray,formSerialize,fieldSerialize,fieldValue,clearForm,clearFields,r...

隔壁老瓦的专栏 2475

OpenResty无损升级内嵌nginx版本0DAY漏洞

OpenResty无损升级内嵌nginx版本,nginx

qq1071643762的博客 6904

Jquery 将表单序列化为Json对象.同时提交多个表单的参数

首先对某一表单进行Json对象序列化:    引用:http://my249645546.iteye.com/blog/1617872   [javascript] view plain copy   (function($){           $.fn.serializeJson=function(){             

程序猿开发日志【学习永无止境】 3451

别再到处找模板了!我用这套软著申请材料(含用户手册+源代码模板)两个月搞定

本文提供了一套高效的软著申请材料模板,包括用户手册和源代码模板,帮助开发者两个月内快速完成申请。通过实战指南和常见误区解析,详细介绍了材料准备的规范与技巧,确保格式合规性,大幅提升审核通过率。

weixin_29268637的博客 549

从零到一:Livox Mid-360 激光雷达的硬件集成与避坑实战

本文详细介绍了Livox Mid-360激光雷达的硬件集成全流程,包括硬件准备、网络配置、驱动编译和常见问题解决方案。通过实战经验,帮助开发者高效完成从设备拆箱到数据输出的完整链路,避免在IP设置、驱动编译和固件兼容性等环节踩坑。

salt的博客 1030

jQuery 将表单序列化为Json对象

(function($){ $.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); var str=this.serialize(); $(array).each(function(){ if(serializeObj[this.name...

weixin_30597269的博客 89

AI人工智能与TensorFlow的教育科技应用

随着科技的飞速发展,AI人工智能在各个领域都展现出了巨大的潜力,教育领域也不例外。本文章的目的在于深入探讨AI人工智能与TensorFlow在教育科技中的具体应用,包括智能教学系统的开发、学生学习情况的评估与预测等方面。范围涵盖了从基础概念到实际项目应用的各个层面,旨在为教育科技工作者和相关研究者提供全面且深入的技术指导。本文将首先介绍AI人工智能和TensorFlow的核心概念及其联系,让读者对相关技术有基本的了解。接着详细讲解核心算法原理和具体操作步骤,并结合数学模型和公式进行深入分析。

AI智能探索者的博客 1697

【jQuery】form表单元素序列化为json对象

  序列化form表单元素为json对象: 1 <!Doctype html> 2 <html xmlns=http://www.w3.org/1999/xhtml> 3 <head> 4 <title>jQuery扩展——form序列化到json对象</title> 5 <meta http-e...

weixin_30319153的博客 90

LAMMPS-使用MATLAB计算径向分布函数

首先需要使用LAMMPS进行分子动力学模拟,并获取到所需的数据文件,LAMMPS是一款开源的分子动力学模拟软件,可以模拟原子、分子和离子的运动行为,对于本文的目标假设你已经完成了LAMMPS的安装和模拟过程,获得了数据文件。)是一种重要的统计工具,用于描述原子或分子之间的空间分布情况,通过计算RDF可以获得物质的结构信息、相互作用距离以及相位转变等重要参数,本文将介绍如何使用MATLAB计算LAMMPS生成的数据文件的径向分布函数。变量替换为你的实际数据文件的名称。

weixin_50547796的博客 515

C# MVVM的“核武器”:CommunityToolkit.Mvvm的RelayCommand实战全解

你默默打开VS:“该用RelayCommand的‘量子纠缠’魔法了!用户点击按钮无响应,调试器显示命令未绑定,但代码看起来完美无缺。“我的MVVM应用?那可是能穿越线程的命令量子计算机!异步操作阻塞了UI线程,用户界面变成“加载中”死循环。:UI与业务逻辑通过命令“量子隧道”解耦。:所有长时间操作自动进入“量子跃迁”模式。:携带任意上下文的“量子信封”传递。:命令可用性随数据变化实时同步。

java专栏 663

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

jquery表单验证(非实时验证),同时,将表单序列化为json对象提交表单。 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 &...

weixin_30254435的博客 118

Android 13.0 设置默认屏幕亮度百分比

在13.0的系统ROM产品开发中,在一些产品开发中,对于设置默认屏幕亮度和屏幕亮度百分比的功能,在开发中也是常见的功能,在10.0的平台设置可能有一些不同,一般的都是在SettingProvider中设置就可以了 在11.0以后的系统中设置默认屏幕亮度的方法就不同了,接下来具体分析功能的实现

安卓兼职framework和app工程师的博客 1560

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

/* 来源于博客园http://www.cnblogs.com/nixil/archive/2010/12/08/1900745.html */ function paramString2obj(serializedParams) { var obj = {}; function evalThem(str) { var attributeN...

abdulla8884的博客 135

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: select标签的美化及js模拟解决方案
下一篇: 修改MySQL字符编码
Snoopy7713
博客等级 码龄21年 17粉丝 681原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值