js表单处理中单选、多选、选择框值的获取及表单的序列化


Posted in Javascript onMarch 08, 2016

本文总结了下在表单处理中单选、多选、选择框值的获取及表单的序列化,写成了一个对象。如下:

var formUtil = {
  // 获取单选按钮的值,如有没有选的话返回null
  // elements为radio类的集合的引用
  getRadioValue:function(elements) {
   var value = null; // null表示没有选中项
   // 非IE浏览器
   if(elements.value != undefined && elements.value != '') {
    value = elements.value;
   } else {
    // IE浏览器
    for(var i = 0, len = elements.length; i < len; i++ ) {
     if(elements[i].checked) {
      value = elements[i].value;
      break;
     }
    }
   }
   return value;
  },
  
  // 获取多选按钮的值,如有没有选的话返回null
  // elements为checkbox类型的input集合的引用
  getCheckboxValue:function(elements) {
   var arr = new Array();
   for(var i = 0, len = elements.length; i < len; i++ ) {
    if(elements[i].checked) {
     arr.push(elements[i].value);
    }
   }
   if(arr.length > 0) {
    return arr.join(',');
   } else {
    return null; // null表示没有选中项
   } 
  },
  
  // 获取下拉框的值
  // element为select元素的引用
  getSelectValue:function(element) {
   if(element.selectedIndex == -1) {
    return null; // 没有选中的项时返回null
   };
   if(element.multiple) {
    // 多项选择
    var arr = new Array(), options = element.options;
    for(var i = 0, len = options.length; i < len; i++) {
     if(options[i].selected) {
      arr.push(options[i].value);
     }
    }
    return arr.join(",");
   }else{
    // 单项选择
    return element.options[element.selectedIndex].value;
   }
  },
  
  // 序列化
  // form为form元素的引用
  serialize:function(form) {
   var arr = new Array(),
   elements = form.elements,
   checkboxName = null;
   for(var i = 0, len = elements.length; i < len; i++ ) {
    field = elements[i];
    // 不发送禁用的表单字段
    if(field.disabled) {
     continue;
    }
    switch (field.type) {
     // 选择框的处理
     case "select-one":
     case "select-multiple":
      arr.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(this.getSelectValue(field)));
      break;
     
     // 不发送下列类型的表单字段 
     case undefined :
     case "button" :
     case "submit" :
     case "reset" :
     case "file" :
      break;
     
     // 单选、多选和其他类型的表单处理  
     case "checkbox" :
      if(checkboxName == null) {
       checkboxName = field.name;
       arr.push(encodeURIComponent(checkboxName) + "=" + encodeURIComponent(this.getCheckboxValue(form.elements[checkboxName])));
      }
      break;
     case "radio" :
      if(!field.checked) {
       break;
      }
     default:
      if(field.name.length > 0) {
       arr.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
      } 
    }
   }
   return arr.join("&");
  } 
 };

一个简单的demo:

<form action="test_php.php" id="form1" name="form1" method="post" enctype="multipart/form-data">
  姓名:<input name="name" type="text" tabindex="1" /> <br>
  性别:<input name="sex" type="radio" value="男"/> 男 
    <input name="sex" type="radio" value="女" /> 女 <br>
  爱好:
  <input name="hobby" type="checkbox" value="篮球" /> 篮球
  <input name="hobby" type="checkbox" value="足球" /> 足球
  <input name="hobby" type="checkbox" value="乒乓球" /> 乒乓球
  <input name="hobby" type="checkbox" value="羽毛球" /> 羽毛球
  <br />
  年级:
  <select name="class" multiple>
   <option value="一年级">一年级</option>
   <option value="二年级">二年级</option>
   <option value="三年级">三年级</option>
  </select>
  <br />
   其他:
   <br />
   <textarea name="other" rows="5" cols="30" tabindex="2"></textarea>
   <br />
   <input type="reset" value="重置" />
   <input type="submit" value="提交" />
 </form>
 <div id="output"></div>
var form = document.getElementById("form1"),
 output = document.getElementById("output");
 
 // 自定义的提交事件
 EventUtil.addEventListener(form,"submit", function(event) {
  event = EventUtil.getEvent(event);
  EventUtil.preventDefault(event);
  var html = "";
  html += form.elements['name'].value + "<br>";
  html += formUtil.getRadioValue(form.elements['sex']) + "<br>";
  html += formUtil.getCheckboxValue(form.elements['hobby']) + "<br>";
  html += formUtil.getSelectValue(form.elements['class']) + "<br>";
  html += form.elements['other'].value + "<br>";
  html += decodeURIComponent(formUtil.serialize(form)) + "<br>";
  output.innerHTML = html;
 });

如果大家还想继续学习的话,请参考以下专题《javascript选择框操作》《jquery选择框操作》

以上就是针对js表单处理中单选、多选、选择框值的获取及表单的序列化封装的对象,希望对打击的学习有所帮助。

Javascript 相关文章推荐
基于jquery用于查询操作的实现代码
May 10 Javascript
jquery键盘事件使用介绍
Nov 01 Javascript
自己封装的javascript事件队列函数版
Jun 12 Javascript
VS2008中使用JavaScript调用WebServices
Dec 18 Javascript
jQuery实现表格行上移下移和置顶的方法
May 22 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
JS组件Bootstrap Table布局详解
May 27 Javascript
ReactNative-JS 调用原生方法实例代码
Oct 08 Javascript
微信小程序左右滑动切换页面详解及实例代码
Feb 28 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
Vue DevTools调试工具的使用
Dec 05 Javascript
vue本地打开build后生成的dist文件夹index.html问题
Sep 04 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 #Javascript
Angularjs material 实现搜索框功能
Mar 08 #Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 #Javascript
三种Node.js写文件的方式
Mar 08 #Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 #Javascript
理解javascript正则表达式
Mar 08 #Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 #Javascript
You might like
一个颜色轮换的简单例子
2006/10/09 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
python实现简单温度转换的方法
2015/03/13 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python redis 删除key脚本的实例
2019/02/19 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
装修设计师求职信
2014/02/26 职场文书
主持人演讲稿
2014/05/13 职场文书
工厂车间标语
2014/06/19 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
社区工作者个人总结
2015/02/28 职场文书
党支部考察鉴定意见
2015/06/02 职场文书