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学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
基于javascript实现单选及多选的向右和向左移动实例
Jul 25 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
addEventListener()与removeEventListener()解析
Apr 20 Javascript
js原生代码实现轮播图的实例讲解
Jul 28 Javascript
深入理解React高阶组件
Sep 28 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
Apr 21 Javascript
vue全局自定义指令-元素拖拽的实现代码
Apr 14 Javascript
Angular8 实现table表格表头固定效果
Jan 03 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读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python中分数的相关使用教程
2015/03/30 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
对pandas中apply函数的用法详解
2018/04/10 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python对列表的操作知识点详解
2019/08/20 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
如何理解Python中的变量
2020/06/01 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
师范生求职信
2014/06/14 职场文书
行政介绍信范文
2015/05/04 职场文书
Python制作表白爱心合集
2022/01/22 Python