jQuery表单数据收集成key/value对象

常常遇到需要$.get或者$.post一个表单数据,而各种各样的input、textarea、radio、checkbox等类型数据,如果想通过jQuery来提交,你必须一个一个的收集数据然后整理成一个JSON格式的{key:value, key:value...}数据,然后再提交到一个地址,为了解决这个郁闷的情况,我自己原创了一个JS方法,自动在提交前收集数据,而无须手动一个个地去整理,代码如下,大家可以尽情转载试用,但出问题不负责哈哈,你可以完善它:

// JavaScript Document
/**
 * 检测数组中是否包含与指定值相同的单元
 * 成功则返回值相同的第一个位置,没有相同的则返回FALSH
 */
Array.prototype.contain = function(_val){
	if(this.length <= 0) return false;

	for(var i=0;i<this.length;i++)
	{
		if(this[i] == _val) return i;
	}
	return false;
};

// 清空数组,并还原页面效果
Array.prototype.clear = function(){
	this.splice(0, this.length);
};

// 收集表单数据项目(还有个textarea中的换行问题是通过转换成<br/>解决的,大家自己完善)
function formdata(_id) {
	var dd = new Object;
	var val = '';
	var tag = '';
	var name = '';
	
	// 处理text、checkbox、select、textarea数据
	$('#'+_id+' input[type=text],#'+_id+' input[type=hidden],#'+_id+' input[type=checkbox],#'+_id+' select,#'+_id+' textarea').each(
		function(){
			val = $(this).val();
			tag = this.tagName.toUpperCase();
			if ($(this).attr('type') == 'checkbox') val = ($(this).attr('checked') ? val : '');
			// 新方法(待测试)
//			val = val.replace(/\r/g, '');
//			val = val.replace(/\n/g, '[n]');
//			eval('dd.'+$(this).attr('name')+'="'+val+'";');
//			eval('dd.'+$(this).attr('name')+'=dd.'+$(this).attr('name')+'.replace(/\\[n\\]/g, "\\n")');
			
			// 原方法
			if (tag == 'TEXTAREA') val = val.replace(/[\r\n]/g, '<br />');
			name = ($(this).attr('name') == "" ? ($(this).attr('id') == "" ? "NULL" : $(this).attr('id')) : $(this).attr('name'));
			
			if(name != "NULL") eval('dd.'+name+'="'+val+'";');
		}
	);
	
	// 处理radio数据
	var radios = new Array();
	var tname = '';
	var size = 0;
	
	$('#'+_id+' input[type=radio]').each(
		function(){
			tname = $(this).attr('name');
			if (radios.contain(tname) == false) radios.push(tname);
		}
	);
	
	size = radios.length;
	for (var i=0; i<size; i++) {
		val = $('#'+_id+' input[type=radio][name='+radios[i]+'][checked]').val();
		if (val == undefined) val = '';
		eval('dd.'+radios[i]+'="'+val+'";');
	}
	radios.clear();
	
	return dd;
}

// 测试用途:输出所有表单数据
function allpro ( obj ) { 
	// 用来保存所有的属性名称和值 
	var props = "";
	// 开始遍历 
	for ( var p in obj ){ 
		// 方法 
		if ( typeof ( obj [ p ]) == " function " ){ 
			obj [ p ]() ; 
		} else { 
			props += p + " = " + obj [ p ] + " \t " ; 
		} 
	} 
	alert( props ) ; 
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵大斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值