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 相关文章推荐
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
js select option对象小结
Dec 20 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
angular异步验证防抖踩坑实录
Dec 01 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
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
php session的锁和并发
2016/01/22 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
详细介绍Python的鸭子类型
2016/09/12 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python日期相关操作实例小结
2019/06/24 Python
如何通过python实现人脸识别验证
2020/01/17 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
高中学生期末评语
2014/04/25 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
大二学年个人总结
2015/03/03 职场文书
入党自传范文2015
2015/06/26 职场文书
物业保洁员管理制度
2015/08/05 职场文书