Jquery 将表单序列化为Json对象
2013-06-27 17:11
495 查看
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。
我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:
Js代码
/**
* 重置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代码
<form id="myForm" action="#">
<input name="name"/>
<input name="age"/>
<input type="submit"/>
</form>
Jquery插件代码如下:
Js代码
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
$(this.serializeArray()).each(function(){
serializeObj[this.name]=this.value;
});
return serializeObj;
};
})(jQuery);
下面测试一下:$("#myForm").bind("submit",function(e){
Js代码
e.preventDefault();
console.log($(this).serializeJson());
});
测试结果:
输入a,b提交,得到序列化结果
{age: "b",name: "a"}
上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:
Js代码
(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代码
<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"]}
我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:
Js代码
/**
* 重置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代码
<form id="myForm" action="#">
<input name="name"/>
<input name="age"/>
<input type="submit"/>
</form>
Jquery插件代码如下:
Js代码
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
$(this.serializeArray()).each(function(){
serializeObj[this.name]=this.value;
});
return serializeObj;
};
})(jQuery);
下面测试一下:$("#myForm").bind("submit",function(e){
Js代码
e.preventDefault();
console.log($(this).serializeJson());
});
测试结果:
输入a,b提交,得到序列化结果
{age: "b",name: "a"}
上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:
Js代码
(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代码
<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 serializeObject 序列化form表单Json对象 jQuery.extend()合并对象
- jquery将表单序列化json对象
- Jquery 将表单序列化为Json对象.同时提交多个表单的参数
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 表单序列化与反序列化JSON对象(基于jQuery)
- jquery 序列化(json对象序列化Url 表单序列化Url )
- Jquery如何序列化form表单数据为JSON对象
- Jquery 将表单序列化为Json对象
- Jquery 将表单序列化为Json对象
- Jquery --- 将表单form数据序列化成json对象
- jQuery serializeObject 序列化form表单Json对象 jQuery.extend()合并对象
- Jquery 将表单序列化为Json对象
- jQuery序列化form表单数据为JSON对象的实现方法
- jQuery表单序列化为json对象插件
- jQuery序列化表单为JSON对象
- jQuery序列化表单为JSON对象
- jQuery实现form表单元素序列化为json对象的方法
- jQuery实现form表单元素序列化为json对象的方法
- Jquery将表单序列化为Json对象{xx:'xx'} 和{'xx':'xx'}都支持
- jQuery实现form表单序列化转换为json对象功能示例