form表单序列化详解(推荐)


Posted in Javascript onAugust 15, 2017

form的序列化,即将表单中的键值序列化为可提交的字符串

表单

<form id="target">
  <select name="age">
   <option value="age1">20</option>
   <option value="age2" selected>21</option>
  </select>
  <input name="name" value="Cynthia">
  <label>passsword</label>
  <input type="password" name="password" value="123456">
  <input type="hidden" name="salery" value="3333">
  <textarea name="description" cols="15" rows="5">description</textarea>
  <input type="checkbox" name="hobby" value="football" checked> Football
  <input type="checkbox" name="hobby" value="basketball"> Basketball
  <input type="radio" name="sex" value="Female" checked> Female
  <input type="radio" name="sex" value="Male"> Male
 </form>

方法一 

function serializeForm1(form){ 
   var setForm = ""; 
   for(var key in form){ 
    if(form.hasOwnProperty(key)){ 
     setForm += '"'+form[key].name+'"'+':'+'"'+form[key].value + '"'+',';
    }
   }
   setForm = "{" + setForm.slice(0,setForm.length -1) + "}";
   console.log(setForm);
   // console.log(JSON.parse(setForm));
   return JSON.parse(setForm);
  }
   
  // 调用
  var oForm = document.getElementById('target');
  console.log(serializeForm3(oForm));

结果:

form表单序列化详解(推荐)

方法二

function serializeForm2(form) {
   var parts = [];
   for (var i = 0, i1 = form.elements.length; i < i1; i++) {
    var field = form.elements[i];
    switch (field.type) {
     case 'select-one':
     case 'select-multiple':
      if (field.type.length) {
       for (var j = 0, j1 = field.options.length; j < j1; j++) {
        var option = field.options[j];
        if (option.selected) {
         var optionValue = '';
         if (option.hasAttribute('value') && option.attributes['value'].specified) {
          //specified表明是否有此属性,有的话返回true,若定义了此属性但尚未添加到元素中也返回true。
          optionValue = option.value;
         } else {
          optionValue = optionValue.text;
         }
         parts.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(optionValue));
        }
       }
      }
      break;
     case undefined:
     case 'file':
     case 'submit':
     case 'reset':
     case 'button':
      break;
     case 'radio':
     case 'checkbox':
      if(!field.checked){
       break;
      }else{
       parts.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.dataset['index']));
       break;
      }
     default:
      if(field.name.length){
       parts.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.value));
      }
    }
   }
   return parts.join('&');
  }
   
  // 调用
  var oForm = document.getElementById('target');
    console.log(serializeForm2(oForm));

结果:

form表单序列化详解(推荐)

方法三

function serializeForm3(form){
   if(!form||form.tagName.toUpperCase()!='FORM'){
    return false;
   }
   var res=[];
   var tag,tagType,tagVal,tagName;
   for(var i=0;i<form.length;i++){
    tag=form[i];
    tagType=form[i].type;
    tagVal=form[i].value;
    tagName=form[i].name; 
    var reg1=/['textarea'|'text'|'passsword'|'label']/g;
    var reg2=/['radio'|'checkbox']/g;
    var reg3=/['select']/g;
    if(reg1.test(tagType)){
     res.push(encodeURIComponent(tagName)+"="+encodeURIComponent(tagVal));
    }else if(reg2.test(tagType)&&tag.checked){
     res.push(encodeURIComponent(tagName)+"="+encodeURIComponent(tagVal)); 
    }else if(reg3.test(tagType)){
     for(var j=0;j<tag.options.length;j++){
      if(tag.options[j].selected){
      res.push(encodeURIComponent(tagVal)+"="+encodeURIComponent(tag.options[j].value||tag.options[j].text)); 
      }
     }
    }else{}
   } 
   return res.join(" & ");
  }
   
  // 调用
  var oForm = document.getElementById('target');
  console.log(serializeForm3(oForm));

结果:

form表单序列化详解(推荐)

以上就是本文的全部内容啦,希望对大家有所帮助~

Javascript 相关文章推荐
JavaScript 拾漏补遗
Dec 27 Javascript
jQuery的一些特性和用法整理小结
Jan 13 Javascript
js的逻辑运算符 ||
May 31 Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
Jun 27 Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 Javascript
JQuery异步获取返回值中文乱码的解决方法
Jan 29 Javascript
jquery+html仿翻页相册功能
Dec 20 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
Sep 27 Javascript
Vue.js组件通信之自定义事件详解
Oct 19 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 Javascript
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 #Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 #Javascript
jQuery DOM节点的遍历方法小结
Aug 15 #jQuery
Mongoose实现虚拟字段查询的方法详解
Aug 15 #Javascript
深入浅析Vue不同场景下组件间的数据交流
Aug 15 #Javascript
React应用中使用Bootstrap的方法
Aug 15 #Javascript
JavaScript函数中的this四种绑定形式
Aug 15 #Javascript
You might like
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP递归算法的简单实例
2019/02/28 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
js实现网页收藏功能
2015/12/17 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
高级3D打印市场:Gambody
2019/12/26 全球购物
小学生读书感言
2014/02/12 职场文书
学生生病请假条范文
2014/02/16 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
中学生运动会口号
2014/06/07 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
英语辞职信范文
2015/02/28 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers