您的位置:首页 > Web前端 > JQuery

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

2011-07-20 17:56 537 查看
常常遇到需要$.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, '
');
//			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 ) ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐