表单序列化

在 JavaScript 中,可以利用表单字段的 type 属性,连同 name 和 value 属性一起实现对表单的序列化。在编写代码之前,有必须先搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。
 对表单字段的名称和值进行 URL 编码,使用和号(&)分隔。
 不发送禁用的表单字段。
 只发送勾选的复选框和单选按钮。
 不发送 type 为"reset"和"button"的按钮。
 多选选择框中的每个选中的值单独一个条目。
 在单击提交按钮提交表单的情况下,也会发送提交按钮;否则,不发送提交按钮。也包括 type为"image"的元素。
 元素的值,就是选中的元素的 value 特性的值。如果元素没有value 特性,则是元素的文本值。

在表单序列化过程中,一般不包含任何按钮字段,因为结果字符串很可能是通过其他方式提交的。除此之外的其他上述规则都应该遵循。以下就是实现表单序列化的代码。

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.selected){
							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;
			case undefined: //字段集
			case "file": //文件输入
			case "submit": //提交按钮
			case "reset": //重置按钮
			case "button": //自定义按钮
			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("&");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值