表单(四)表单序列化

表单序列化的作用是:将表单内容序列化成一个字符串,方便Ajax传递表单值给服务器。

【浏览器把表单数据提交到服务器的细节】:
1. 对字段的名和值进行URL编码,并使用“&”分隔
2. 不发送禁用的字段 disabled
3. 多选框中每个选中的名值对是单独的一个条目
4. 在<select>元素中,option如果没有value特性,则值为option的文本值text
5. 不发送button、reset、submit、file字段的名值对
var form = document.getElementById("表单ID");
function serialize(form){
    var parts = [],   //保存字段和对应值的一个数组
       field = null,
        i,
        len,
        j,
        optLen,
        option,
        optValue;
    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.hasAttribute){
                            optValue = (option.hasAttribute("value")? option.value : option.text);
                        }
                        //IE
                        else{
                            optValue = (option.attributes["value"].specified ? option.value : option.text);
                        }
                        parts.push(encodeURIComponent(field.name) +"="+ encodeURIComponent(optValue));
                    }
                }
                break;
            case undefined:  //fieldset元素没有type属性
            case "file":
            case "button":
            case "reset":
            case "submit":
                break;
            case "radio":
            case "checkbox":
                if(!field.checked){
                    break;  //没有勾选的不用发送给服务器
                }
            default:
                if(field.name.length){
                    parts.push(encodeURIComponent(field.name) +"="+ encodeURIComponent(field.value));
                }

        }
    }
    return parts.join("&");
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值