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 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
javascript 清空form表单中某种元素的值
Dec 26 Javascript
js中的this关键字详解
Sep 25 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
jquery仅用6行代码实现滑动门效果
Sep 07 Javascript
JQuery核心函数是什么及使用方法介绍
May 03 Javascript
javascript关于继承解析
May 10 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
JavaScript 跨域之POST实现方法
May 07 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 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
提升PHP执行速度全攻略
2006/10/09 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php上传文件常见问题总结
2015/02/03 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python的数学算法函数及公式用法
2020/11/18 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
大学生入党思想汇报
2014/01/01 职场文书
2014年法务工作总结
2014/12/11 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python