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系列(6) 强大的原型和原型链
Jan 15 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
jquery1.9 下检测浏览器类型和版本的方法
Dec 26 Javascript
jQuery实现的图片分组切换焦点图插件
Jan 06 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
JS实现的简洁二级导航菜单雏形效果
Oct 13 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
vue中英文切换实例代码
Jan 21 Javascript
微信小程序自定义modal弹窗组件的方法详解
Dec 20 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类Class的概念
2012/06/14 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
Sort()函数的多种用法
2016/03/20 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
小学优秀辅导员事迹材料
2014/05/11 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS