大家知道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. function strToObj(str){
  13. str = str.replace(/&/g,"','");
  14. str = str.replace(/=/g,"':'");
  15. str = "({'"+str +"'})";
  16. obj = eval(str);
  17. return obj;
  18. }

个人感觉这样做有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);

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

  1. e.preventDefault();
  2. console.log($(this).serializeJson());
  3. });

测试结果:

输入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 bike
  11. <input type="checkbox" name="vehicle" value="Car" /> I have a car
  12. <input type="submit"/>
  13. </form>

测试结果:

{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}

最新文章

  1. javascript数组查重方法总结
  2. cat命令使用
  3. spring 事务:注解方式
  4. WkHtmlToPdf 生成 PDF
  5. SQL数据库完全复制
  6. 细说LastLogonTimeStamp
  7. C++学习之类的构造函数、析构函数
  8. C\C++ 框架和库整理(转)
  9. 将远程数据库中的某表数据复制到本数据库(ORACLE)
  10. 用Delphi实现WinSocket高级应用
  11. 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
  12. 互怼、IPO、雷潮、寒冬,2018 互联网圈的那些事儿
  13. HTTP中Post与Put的区别
  14. MySQL基本命令(待更新...)
  15. 未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage(转)
  16. Win8常用快捷键
  17. 【转载】纵观RTX51
  18. Gitlab-system-hooks
  19. Linux下top命令监控性能状态
  20. 20155206 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

热门文章

  1. PL/SQL基础-异常处理
  2. Gleeo Time Tracker简明使用教程
  3. [Weblogic]如何清理缓存
  4. n&amp;(n-1) n&amp;(-n)
  5. [转载] 数据测试常用的Data Profiling方法
  6. Asp.net mvc中的Ajax处理
  7. javascript元素绑定事件
  8. 浅谈 sql 中数据的约束
  9. Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
  10. 超链接的那些事(三): 属性target