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 相关文章推荐
一个php+js实时显示时间问题
Oct 12 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
javascript创建含数字字母的随机字符串方法总结
Aug 01 Javascript
jQuery实现图片轮播效果代码
Sep 27 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
js中的面向对象入门
Mar 06 Javascript
jquery事件与绑定事件
Mar 16 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
基于vue实现圆形菜单栏组件
Jul 05 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP防盗链代码实例
2014/08/27 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
jquery实现居中弹出层代码
2010/08/25 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
JavaScript闭包详解
2015/02/02 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
angular 服务随记小结
2019/05/06 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
优秀教师个人材料
2014/12/15 职场文书
广播体操比赛主持词
2015/06/29 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
Java spring单点登录系统
2021/09/04 Java/Android
sass 常用备忘案例详解
2021/09/15 HTML / CSS