首页 > 代码库 > Jquery 系列化表单
Jquery 系列化表单
大家知道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 13 function strToObj(str){ 14 str = str.replace(/&/g,"‘,‘"); 15 str = str.replace(/=/g,"‘:‘"); 16 str = "({‘"+str +"‘})"; 17 obj = eval(str); 18 return obj; 19 }
个人感觉这样做有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);
下面测试一下:
1 $("#myForm").bind("submit",function(e){2 e.preventDefault();3 console.log($(this).serializeJson());4 });
测试结果:
输入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 bike11 <input type="checkbox" name="vehicle" value="Car" /> I have a car12 <input type="submit"/>13 </form>
测试结果:
{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}
此文章转载至:http://my249645546.iteye.com/blog/1617872
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。