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 相关文章推荐
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
Array.prototype 的泛型应用分析
Apr 30 Javascript
Dom 是什么的详细说明
Oct 25 Javascript
jquery学习笔记 用jquery实现无刷新登录
Aug 08 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
Sep 27 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
基于JavaScript实现报警器提示音效果
Oct 27 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
vue中v-model的应用及使用详解
Jun 27 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 Javascript
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
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
jQuery中读取json文件示例代码
2013/05/10 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python flask 多对多表查询功能
2017/06/25 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python贪吃蛇游戏代码
2020/04/18 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
教你打造完美的创业计划书
2014/01/06 职场文书
设备售后服务承诺书
2014/05/30 职场文书
商场促销活动策划方案
2014/08/18 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书