js表单中选择框值的获取及表单的序列化


Posted in Javascript onDecember 17, 2015

本文特意为js表单中选择框值的获取及表单的序列化做了下总结,写成了一个对象,分享给大家,欢迎大家学习。

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;
 });

代码出现的EventUtil在这篇文章有介绍: 《js跨浏览器的事件侦听器和事件对象的使用方法》

以上就是对js表单中选择框值的获取及表单的序列化的详细介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JavaScript基本编码模式小结
May 23 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
查找Oracle高消耗语句的方法
Mar 22 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
Jan 15 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
实例教学如何写vue插件
Nov 30 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
vue.js中ref及$refs的使用方法解析
Oct 08 Javascript
浏览器兼容性问题大汇总
Dec 17 #Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 #Javascript
js调出上下文菜单的实例
Dec 17 #Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 #Javascript
JSONObject使用方法详解
Dec 17 #Javascript
JS实现alert中显示换行的方法
Dec 17 #Javascript
JavaScript中Function函数与Object对象的关系
Dec 17 #Javascript
You might like
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
php 操作调试的方法
2012/07/12 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python global和nonlocal用法解析
2020/02/03 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
体育教育专业毕业生自荐信
2013/11/15 职场文书
人力资源总监工作说明
2014/03/03 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
会议接待欢迎标语
2014/10/08 职场文书
2014年家长学校工作总结
2014/11/20 职场文书