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 TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
jQuery中find()方法用法实例
Jan 07 Javascript
Angular中ng-bind和ng-model的区别实例详解
Apr 10 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
微信小程序 textarea 层级过高问题简单解决方案
Oct 14 Javascript
Vue中keep-alive组件作用详解
Feb 04 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
May 09 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 Javascript
原生JS实现拖拽功能
Dec 16 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python config文件的读写操作示例
2019/09/27 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
考试不及格的检讨书
2014/01/22 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
家长会学生演讲稿
2014/04/26 职场文书
电子商务求职信
2014/06/15 职场文书
作风建设年活动总结
2014/08/27 职场文书
养成教育工作总结
2015/08/13 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
各国货币符号大全
2022/02/17 杂记