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动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
jsTree 基于JQuery的排序节点 Bug
Jul 26 Javascript
jquery手风琴特效插件
Feb 04 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
微信小程序实现左滑修改、删除功能
Oct 19 Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 Javascript
基于vue--key值的特殊用处详解
Jul 31 Javascript
JavaScript实现移动小精灵的案例代码
Dec 12 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比你想象的好得多
2014/11/27 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
python实现折半查找和归并排序算法
2017/04/14 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
详解python播放音频的三种方法
2019/09/23 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
违章停车检讨书
2014/10/21 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
为Java项目添加Redis缓存的方法
2021/05/18 Redis
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS