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 页面编码与浏览器类型判断代码
Jun 03 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
Jan 08 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
Sep 23 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
Oct 25 Javascript
深入理解JS addLoadEvent函数
May 20 Javascript
详谈js模块化规范
Jul 07 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 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
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
js function定义函数使用心得
2010/04/15 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python从Oracle读取数据生成图表
2020/10/14 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
Django自带的用户验证系统实现
2020/12/18 Python
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
财务出纳岗位职责
2014/02/03 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
事业单位考核材料
2014/05/21 职场文书
北大自主招生自荐信
2015/03/04 职场文书
小兵张嘎观后感
2015/06/03 职场文书
寒假生活随笔
2015/08/15 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python