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 相关文章推荐
JS文本框不能输入空格验证方法
Mar 19 Javascript
使用jquery实现div的tab切换实例代码
May 27 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
JavaScript中的数组特性介绍
Dec 30 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
Jun 08 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
强大的 Angular 表单验证功能详细介绍
May 23 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
详解Vue的组件中data选项为什么必须是函数
Aug 17 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程序的国际化实现方法(利用gettext)
2011/08/14 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
python机器学习之贝叶斯分类
2018/03/26 Python
django的settings中设置中文支持的实现
2019/04/28 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
优秀毕业生推荐信
2013/11/02 职场文书
医学生自荐信
2013/12/03 职场文书
毕业证丢失证明
2014/01/15 职场文书
房地产促销活动方案
2014/03/01 职场文书
党员干部承诺书
2014/03/25 职场文书
导师就业推荐信范文
2014/05/22 职场文书
师范大学生求职信
2014/06/13 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
初中家长评语大全
2014/12/26 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
如何用JS实现简单的数据监听
2021/05/06 Javascript
详解Node.js如何处理ES6模块
2021/05/15 Javascript
python 提取html文本的方法
2021/05/20 Python
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
Nginx的基本概念和原理
2022/03/21 Servers