大家在获取表单数据和给表单赋值的时候是否也会像下面这样写:
要是表单很长的话真是要泪奔。。。
有人说获取数据可以给jquery添加serializeObject方法:
**
* 表单序列化为json对象
* 用法:var savaData = $('#Form').serializeObject();
*/
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
但是有个问题就是serializeArray()
这个方法是会忽略disabled="disabled"
表单元素。
自己花了些时间整理了以下方法:
注意:要保证
name
值和data
的key
值对应
/**
* 表单赋值
* @param data
* 用法:$('#Form').serializeObject(data);
*/
$.fn.setFormData = function (data) {
for (var key in data) {
var $this = this;
var $tag = $this.find('[name=' + key + ']');
if ($tag.length > 1 ) {
$tag.prop('checked',false);
if(data[key]){
var item = data[key].split(',');
$.each(item, function (i, val) {
var $curTag = $this.find('[name=' + key + '][value=' + val + ']');
$curTag.prop('checked', true);
})
}
} else {
$tag.val(data[key])
}
}
};
/**
* 获取表单值
* @returns {{}}
* 用法:var savaData = $('#Form').getFormData();
*/
$.fn.getFormData = function () {
var obj = {};
var $tags = this.find('[name]');
$tags.each(function () {
var key = $(this).attr('name');
if (obj.hasOwnProperty(key) && $(this).is(':checked')) {
obj[key] = obj[key] + ',' + $(this).val();//checkebox的值是‘aa,bb,cc’这样的格式,要数组的自行修改
return true ;
}
var isCheck= $(this).is(function(){
var type = $(this).attr('type');
return type =='checkbox' || type =='radio'
});
if(isCheck){
if($(this).is(':checked')){
obj[key] = $(this).val();
}
return true;
}else{
obj[key] = $(this).val();
}
});
return obj;
};