Javascript表单序列化原理及实现代码详解


Posted in Javascript onOctober 30, 2020

随着 Ajax 的出现,表单序列化已经成为一种常见需求。在 JavaScript 中,可 以利用表单字段的 type 属性,连同 name 和 value 属性一起实现对表单的序列化。在编写代码之前, 有必须先搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。

​1. 对表单字段的名称和值进行 URL 编码,使用和号(&)分隔。

2. 不发送禁用的表单字段。

3. 只发送勾选的复选框和单选按钮。

4. 不发送 type 为"reset"和"button"的按钮。

5. 多选选择框中的每个选中的值单独一个条目。

6. 在单击提交按钮提交表单的情况下,也会发送提交按钮;否则,不发送提交按钮。

7. <select>元素的值,就是选中的<option>元素的 value 特性的值。如果<option>元素没有 value 特性,则是<option>元素的文本值。

在表单序列化过程中,一般不包含任何按钮字段,因为结果字符串很可能是通过其他方式提交的。除此之外的其他上述规则都应该遵循。

基本的表单序列化可以通过遍历表单元素实现,实例代码如下:

function serialize(form){
 var params = [];
 var eles = form.elements;
 
 for (var i = 0;i<ele.length;i++){
  let field = ele[i];
  switch(field.type){
   case "file": 
   case "submit":
   case "reset": 
   case "button":
    break;
   case "radio":
   case "checkbox":
    if(!field.checked){
     break;
    }
    default:
     //不包含没有名字的表单字段 
     if (field.name.length){ 
      parts.push(encodeURIComponent(field.name) + "=" + 
      encodeURIComponent(field.value)); 
     }
  }
 }
  return parts.join("&");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
Jun 02 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
浅谈javascript的分号的使用
May 12 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
jQuery基本选择器之标签名选择器
Sep 03 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
May 13 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 06 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 #Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 #Javascript
Vue自定义表单内容检查rules实例
Oct 30 #Javascript
探索node之事件循环的实现
Oct 30 #Javascript
使用TS来编写express服务器的方法步骤
Oct 29 #Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 #Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 #Javascript
You might like
PHP print类函数使用总结
2010/06/25 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
电子信息工程专业推荐信
2014/02/14 职场文书
信息管理专业自荐书
2014/06/05 职场文书
法定代表人资格证明书
2014/09/11 职场文书
购房委托书范本
2014/09/18 职场文书
跳高加油稿
2015/07/21 职场文书
python基础之停用词过滤详解
2021/04/21 Python
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL