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

总结了下在表单处理中单选、多选、选择框值的获取及表单的序列化,写成了一个对象。如下:

  1   var formUtil = {
  2         // 获取单选按钮的值,如有没有选的话返回null
  3         // elements为radio类的集合的引用
  4         getRadioValue:function(elements) {
  5             var value = null; // null表示没有选中项
  6             // 非IE浏览器
  7             if(elements.value != undefined && elements.value != ‘‘) {
  8                 value = elements.value;
  9             } else {
 10                 // IE浏览器
 11                 for(var i = 0, len = elements.length; i < len; i++ ) {
 12                     if(elements[i].checked) {
 13                         value = elements[i].value;
 14                         break;
 15                     }
 16                 }
 17             }
 18             return value;
 19         },
 20
 21         // 获取多选按钮的值,如有没有选的话返回null
 22         // elements为checkbox类型的input集合的引用
 23         getCheckboxValue:function(elements) {
 24             var arr = new Array();
 25             for(var i = 0, len = elements.length; i < len; i++ ) {
 26                 if(elements[i].checked) {
 27                     arr.push(elements[i].value);
 28                 }
 29             }
 30             if(arr.length > 0) {
 31                 return arr.join(‘,‘);
 32             } else {
 33                 return null; // null表示没有选中项
 34             }
 35         },
 36
 37         // 获取下拉框的值
 38         // element为select元素的引用
 39         getSelectValue:function(element) {
 40             if(element.selectedIndex == -1) {
 41                 return null; // 没有选中的项时返回null
 42             };
 43             if(element.multiple) {
 44                 // 多项选择
 45                 var arr = new Array(), options = element.options;
 46                 for(var i = 0, len = options.length; i < len; i++) {
 47                     if(options[i].selected) {
 48                         arr.push(options[i].value);
 49                     }
 50                 }
 51                 return arr.join(",");
 52             }else{
 53                 // 单项选择
 54                 return element.options[element.selectedIndex].value;
 55             }
 56         },
 57
 58         // 序列化
 59         // form为form元素的引用
 60         serialize:function(form) {
 61             var arr = new Array(),
 62             elements = form.elements,
 63             checkboxName = null;
 64             for(var i = 0, len = elements.length; i < len; i++ ) {
 65                 field = elements[i];
 66                 // 不发送禁用的表单字段
 67                 if(field.disabled) {
 68                     continue;
 69                 }
 70                 switch (field.type) {
 71                     // 选择框的处理
 72                     case "select-one":
 73                     case "select-multiple":
 74                         arr.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(this.getSelectValue(field)));
 75                         break;
 76
 77                     // 不发送下列类型的表单字段
 78                     case undefined :
 79                     case "button" :
 80                     case "submit" :
 81                     case "reset" :
 82                     case "file" :
 83                         break;
 84
 85                     // 单选、多选和其他类型的表单处理
 86                     case "checkbox" :
 87                         if(checkboxName == null) {
 88                             checkboxName = field.name;
 89                             arr.push(encodeURIComponent(checkboxName) + "=" + encodeURIComponent(this.getCheckboxValue(form.elements[checkboxName])));
 90                         }
 91                         break;
 92                     case "radio" :
 93                         if(!field.checked) {
 94                             break;
 95                         }
 96                     default:
 97                         if(field.name.length > 0) {
 98                             arr.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
 99                         }
100                 }
101             }
102             return arr.join("&");
103         }
104     };

一个简单的demo:

 1   <form action="test_php.php" id="form1" name="form1" method="post" enctype="multipart/form-data">
 2         姓名:<input name="name" type="text" tabindex="1" /> <br>
 3         性别:<input name="sex" type="radio" value="男"/> 男
 4              <input name="sex" type="radio" value="女" /> 女 <br>
 5         爱好:
 6         <input name="hobby" type="checkbox" value="篮球" /> 篮球
 7         <input name="hobby" type="checkbox" value="足球" /> 足球
 8         <input name="hobby" type="checkbox" value="乒乓球" /> 乒乓球
 9         <input name="hobby" type="checkbox" value="羽毛球" /> 羽毛球
10         <br />
11         年级:
12         <select name="class" multiple>
13             <option value="一年级">一年级</option>
14             <option value="二年级">二年级</option>
15             <option value="三年级">三年级</option>
16         </select>
17         <br />
18          其他:
19          <br />
20          <textarea name="other" rows="5" cols="30" tabindex="2"></textarea>
21          <br />
22          <input type="reset" value="重置" />
23          <input type="submit" value="提交" />
24     </form>
25     <div id="output"></div>
 1   var form = document.getElementById("form1"),
 2     output = document.getElementById("output");
 3
 4     // 自定义的提交事件
 5     EventUtil.addEventListener(form,"submit", function(event) {
 6         event = EventUtil.getEvent(event);
 7         EventUtil.preventDefault(event);
 8         var html = "";
 9         html += form.elements[‘name‘].value + "<br>";
10         html += formUtil.getRadioValue(form.elements[‘sex‘]) + "<br>";
11         html += formUtil.getCheckboxValue(form.elements[‘hobby‘]) + "<br>";
12         html += formUtil.getSelectValue(form.elements[‘class‘]) + "<br>";
13         html += form.elements[‘other‘].value + "<br>";
14         html += decodeURIComponent(formUtil.serialize(form)) + "<br>";
15         output.innerHTML = html;
16     });

PS:代码出现的EventUtil在”跨浏览器的事件侦听器和事件对象“这篇文章有介绍。链接:http://www.cnblogs.com/yuanke/p/5045821.html

时间: 2024-10-27 12:32:50

表单中单选、多选、选择框值的获取及表单的序列化的相关文章

使用val()方法设置表单中的默认选中项

有时候我们展示给用户的表单中的checkbox,radio,selec等标签的一些项是默认选中的.比方:当用户改动文章的时候,假设相应的栏目为下拉框的话,那么它的默认选中值应该是原来的栏目位置. 能够使用jquery中的val()方法给select.checkbox.radio设置默认选中项. 对于multiple类型的select和checkbox还能够设置多个默认值. 效果图: 方法: $("select#multiple").val(["选择2号","

6个Web前端纯CSS3实现的单多选选择框效果图展示(上)

1. 界面美化Javascript类库 源码下载  /  在线演示 2.  jquery衣服尺寸勾选表单 源码下载 /  在线演示 3.jquery图形多选复选框 源码下载/   在线演示 6个Web前端纯CSS3实现的单多选选择框效果图展示(上)

6个Web前端纯CSS3实现的单多选选择框效果图展示(下)

4.mootools实现checkbox和radiobox效果 能在支持 FireFox.Chrome.Safari.傲游.搜狗.360浏览器. 源码下载/   在线演示 5.  jquery打钩打叉图标特效 源码下载  /  在线演示 6.  纯CSS3实现的单多选选择框 源码下载 /  在线演示 6个Web前端纯CSS3实现的单多选选择框效果图展示(下)

php处理表单中的复选框问题以及js实现全选

做的一个项目中遇到了全选和取消全选的问题,这是一个很普遍的功能,,虽然我们经常用到,但是真正做起来却发现行不通,在网上找了些,大部分都是ie,但是谷歌内核浏览器不能正常实现,所以经过小小的调整,今天就把调试好的代码发上来供大家参考使用. 首先要记得引用jquery框架,这样写起代码来相对容易点,尤其突出在选择器上. 1 <html> 2 <head> 3 <script src="./libs/js/jquery.min.js"></scrip

表单中单选框添加选项和移除选项

selection添加option并放在最后一项 html代码: <form> <select name="location" id="location"> <option value="beijing1">beijing</option> <option value="shanghai1">shanghai</option> <option val

jquery设置文本框值 与获取文本框的值

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.12.4.js"></script> </head> <body> <input type="tex

js获取table checkbox选中行的值.mdjs获取table checkbox选中行的

<!DOCTYPE html> <html> <head> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script> function check() {         var check = $("input[type='checkbox']:checked");//在tab

用jquery修改默认的单选框radio或者复选框checkbox选择框样式

默认的radio和checkbox选框很难看.我去看了一下qq注册的页面.发现单选和复选框并没有用<input>,居然是用是A标签.然后用css背景图片展示选择框,用JavaScript控制切换.然后我自己用jqeury写了一个这样功能的. 先是html代码 性别 <div id="box-6"> <label>性别</label> <a href="#" name="male" id=&qu

DOM练习 选择框、表格添加、变色

多个选择框,三个按钮,显示:全选.反选.不选 html部分,建立五个多选框,三个按钮 <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <button o