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 相关文章推荐
ExtJS下书写动态生成的xml(兼容火狐)
Apr 02 Javascript
javascript去除字符串左右两端的空格
Feb 05 Javascript
js实现简易的单数字随机抽奖(0-9)
Mar 19 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
vue的传参方式汇总和router使用技巧
May 22 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
Sep 17 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
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实现图片等比例缩放代码
2015/07/23 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
js 表格隔行颜色
2009/12/02 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
python 构造三维全零数组的方法
2018/11/12 Python
django迁移数据库错误问题解决
2019/07/29 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
《中华少年》教学反思
2014/02/15 职场文书
行政副总岗位职责
2014/02/23 职场文书
综合内勤岗位职责
2014/04/14 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书