之前写了一个表单序列化的方法,现在看来,还是有很多东西没考虑到,现在新写了一个,留做参考:

functionserialize **(**form ){

var parts =new Array();

var field =null ;

for(var i =0,len =form.elements.length ;i <len ;i ++){

field =form.elements[i];

switch(field.type){

case"select-one":

case"select-multiple":

for(var j =0,optLen =field.options.length ;j <optLen ;j ++){

var option =field.options[j];

if(option.selected){

var optValue ="";

if(option.hasAttribute){

optValue =option.hasAttribute("value")?option.value:option.text ;

}else{

optValue =option.attributes["value"].specified ?option.value:option.text ;

}

parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(optValue));

}

}

break;

caseundefined :

case"file":

case"submit":

case"reset":

case"button":

break;

case"radio":

case"checkbox":

if(!field.checked){

break;

}

default:

parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(field.value));

}

}

return parts.join("&");

}