Jquery 将表单序列化为Json对象
来源:互联网 发布:mac移动硬盘安装win8 编辑:程序博客网 时间:2024/05/15 06:37
Jquery 将表单序列化为Json对象
- 博客分类:
- JQuery
jquery
大家知道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;
- }
- /**
- * 重置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对象。
下面是表单:
- <formid="myForm"action="#">
- <inputname="name"/>
- <inputname="age"/>
- <inputtype="submit"/>
- </form>
- <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);
- (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());
- });
- 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);
- (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);
这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,"连接的字符串或者其他形式,请自行修改相应代码。
测试如下:
表单:
- <formid="myForm"action="#">
- <inputname="name"/>
- <inputname="age"/>
- <selectmultiple="multiple"name="interest"size="2">
- <optionvalue ="interest1">interest1</option>
- <optionvalue ="interest2">interest2</option>
- <optionvalue="interest3">interest3</option>
- <optionvalue="interest4">interest4</option>
- </select>
- <inputtype="checkbox"name="vehicle"value="Bike"/> I have a bike
- <inputtype="checkbox"name="vehicle"value="Car"/> I have a car
- <inputtype="submit"/>
- </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"]}
0 0
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- 将表单序列化为json对象
- 将表单序列化为json对象
- 将表单你序列化为json对象
- jQuery表单序列化为json对象插件
- Jquery 将表单序列化为Json对象.同时提交多个表单的参数
- Jquery 将表单序列化为Json对象.同时提交多个表单的参数
- jquery将一个表单序列化为一个对象
- 将表单序列化为json字符串
- jQuery 表单数据序列化为json格式
- jquery将表单序列化json对象
- 表单序列化为JSON对象 serializeObject
- jquery form表单序列化为对象
- 从程序员到CTO的Java技术路线图
- JS读取本地文件及目录的方法
- iOS中MD5加密与网络数据安全
- PHP实现MYSQL的查询功能
- ATL 学习备忘录
- Jquery 将表单序列化为Json对象
- 调用地图导航 api实现
- Linux下SFTP搭建
- URLConnection向指定的url发送请求并且带参数
- java使用httpClient调用接口
- Centos 7 打开端口及查询端口
- Android 淡入淡出效果
- 微信oauth慢的原因
- Mysql小知识