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 相关文章推荐
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
javascript hasFocus使用实例
Jun 29 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
浅谈jquery页面初始化的4种方式
Nov 27 Javascript
jquery easyui如何实现格式化列
Jul 30 jQuery
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
JS实现面向对象继承的5种方式分析
Jul 21 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
JS如何定义用字符串拼接的变量
Jul 11 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
一个基于PDO的数据库操作类
2011/03/24 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python数据结构之链表详解
2017/09/12 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Django Rest framework频率原理与限制
2019/07/26 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
2014年百日安全生产活动总结
2014/05/04 职场文书
联片教研活动总结
2014/07/01 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
六年级学生评语大全
2014/12/26 职场文书
2015大一新生军训感言
2015/08/01 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
四十九个javascript小知识实用技巧
2021/11/20 Javascript
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL