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 }