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 }