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 相关文章推荐
js刷新框架子页面的七种方法代码
Nov 20 Javascript
jquery cookie插件代码类
May 26 Javascript
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
javascript面向对象之二 命名空间
Feb 08 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
javascript实现循环广告条效果
Dec 12 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
js实现轮播图的完整代码
Oct 26 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
JS计算距当前时间的时间差实例
2017/12/29 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
浅谈Angular7 项目开发总结
2018/12/19 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Python如何生成xml文件
2020/06/04 Python
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
优秀小学生家长评语
2014/01/30 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
2016父亲节感恩话语
2015/12/09 职场文书