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 相关文章推荐
类似GMAIL的Ajax信息反馈显示
Feb 16 Javascript
JQuery 选择器 xpath 语法应用
May 13 Javascript
javascript下利用arguments实现string.format函数
Aug 24 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
jquery解析XML字符串和XML文件的方法说明
Feb 21 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 Javascript
JavaScript如何操作css
Oct 24 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
php array_filter除去数组中的空字符元素
2020/06/21 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php查询whois信息的方法
2015/06/08 PHP
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python使用epoll实现服务端的方法
2018/10/16 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
python实现UDP协议下的文件传输
2020/03/20 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
英语专业个人求职自荐信
2013/09/21 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
创建文明学校实施方案
2014/03/11 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
拆迁委托协议书
2014/09/15 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
迎新生晚会主持词
2015/06/30 职场文书
获奖感言范文
2015/07/31 职场文书
如何用python插入独创性声明
2021/03/31 Python
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Java 数组的使用
2022/05/11 Java/Android