function serialize(form){ var part =[]; var field = null; var i; var j; var len; var optLen; var option; var optVal; for(i=0,len=form.elements.length;i<len;i++){ field = form.elements[i]; switch(field.type){ case "select-one": case "select-multiple": if(field.name.length){ for(j=0,optLen=field.options.length;j<optLen;j++){ option = field.options[j]; if(option.selected){ optVal=""; if(option.hasAttribute){ optVal = (option.hasAttribute("value")?option.value:option.text); }else{ optVal = (option.attributes["value"].specified?option.value:option.text); } part.push(encodeURIComponent(field.name)+"="+encodeURIComponent(optVal)); } } } break; case undefined:// 字符集 case "file":// 文件输入 case "submit":// 提交按钮 case "reset":// 重置按钮 case "button":// 自定义按钮 break; case "radio":// 单选按钮 case "checkbox":// 复选框 if(!field.checked){ break; } default: if(field.name.length){ part.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value)); } } } return part.join("&"); }
1)对表单字段的名称和值进行URL编码,使用和号(&)分隔。
2)不发送禁用的表单字段
3)只发送勾选的复选框和单选按钮
4)不发送type为"reset"和”button"的按钮
5)多选框中每个选中的值单独一个条目
6)在单击提交按钮提交表单的情况下,也会发送提交按钮,否则不发送提交按钮。也包括type为“image”的<input>元素。
7)select元素的值就是选中的<option>元素的value的值,如果option元素没有value属性,则为选中的文本值。