表单序列化

 1 /*
 2  *对表单字段的名称和值进行URL编码,使用和号(&)分割。
 3  *不发送禁用的表单字段。
 4  *只发送勾选的复选框和单选按钮。
 5  *不发送type为"reset"和"button"的按钮。
 6  *多选选择框中的每个选中的值单独一个条目。
 7  *在单击提交表单的情况下,也会发送提交按钮;否则,不发送提交按钮。也包括type为"image"的<input>元素。
 8  *<select>元素的值,就是选中的<option>元素的value特性的值。如果<option>元素没有value特性,则是<option>元素的文本值。
 9  */
10 
11 function serialize(form) {
12     var parts = new Array();
13     var field = null;
14 
15     for (var i = 0, len = form.elements.length; i < len; i++) {
16         field = form.elements[i];
17 
18         switch (field.type) {
19         case "select-one":
20         case "select-multiple":
21             for (var j = 0, optLen = field.options.length; j < optLen; j++) {
22                 var option = field.options[i];
23                 if (option.selected) {
24                     var optValue = "";
25                     if (option.hasAttribute) {
26                         optValue = (option.hasAttribute("value") ? option.value : option.text);
27                     } else {
28                         optValue = (option.attributes["value"].specified ? option.value : option.text);
29                     }
30                     parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
31                 }
32             }
33             break;
34         case undefined:
35             //字段集
36         case "file":
37             //文件输入
38         case "submit":
39             //提交按钮
40         case "reset":
41             //重置按钮
42         case "button":
43             //自定义按钮
44             break;
45         case "radio":
46             //单选按钮
47         case "checkbox":
48             //复选框
49             if (!field.checkbox) {
50                 break;
51             } /* 执行默认操作 */
52         default:
53             parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
54         }
55     }
56     return parts.join("&");
57 }

 

posted @ 2012-06-04 20:34  小猩猩君  阅读(418)  评论(0编辑  收藏  举报