http://zhengxinlong.iteye.com/blog/848712

将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。

/// <reference name="jquery.js" description="1.3.2版本以上" />

/*!* 扩展jQuery表单序列化函数:{ Version: 1.2, Author: Eric.Zheng, CreateDate: 2010-12-21 }
*
* 消除了jQuery.serialize()只能对form进行序列化的局限
* 该插件可以对任意jQuery对象进行序列化
* 返回数据格式有两种:1.<name&value>(默认) 2.json
*
* 调用方法:$(dom).form_serialize(dataType);
* 参数(可省略):dataType: 默认为html,即返回数据格式为<name&value>;若要返回json格式,则dataType = json;
* 返回数据:序列化表单数据
*
* BUG修复:修复了1.0版本中,多个Dom元素使用同一个name属性时,获取的数据有缺失。
*
**/
(function ($) {
var formJson = {};
var currentForm = null; $.fn.form_serialize = function (dataType) {
currentForm = $(this);
formJson = {};
var doms = currentForm.find('[name]');
$.each(doms, function (index, dom) {
var domName = $(dom).attr('name');
if (!formJson[domName]) {
formJson[domName] = { Name: domName, Type: $(dom).attr('type'), Doms: currentForm.find('[name=' + domName + ']') };
}
});
return getResult(dataType);
}; var getResult = function (dataType) {
var d = {
toJson: function () {
var data = {};
$.each(formJson, function (key, json) {
data[key] = getVal(json);
});
return data;
},
toString: function () {
var val = '';
var index = 0;
$.each(formJson, function (key, json) {
var prefix = '&';
if (index == 0) prefix = '';
index++;
val += prefix + key + '=' + getVal(json);
});
return val;
}
};
return dataType == 'json' ? d.toJson() : d.toString();
} var getVal = function (json) {
var methods = {
getDefaultVal: function (dom) {
return $(dom).val();
},
getSelectVal: function (dom) {
var val = '';
var selectType = $(dom).attr('type');
if (selectType == 'select-multiple') {
var items = $(dom).val();
if (items == null) return '';
for (var i = 0; i < items.length; i++) {
val += i == 0 ? items[i] : (',' + items[i]);
}
return val;
} else {
return $(dom).val();
}
},
getRadioVal: function (dom) {
return $(dom).attr('checked') ? $(dom).val() : null;
},
getCheckBoxVal: function (dom) {
return methods.getRadioVal(dom);
}
}; var dispacher = function (type, dom) {
switch (type) {
case 'text':
case 'password':
case 'hidden':
case 'textarea':
return methods.getDefaultVal(dom);
case 'select-one':
case 'select-multiple':
return methods.getSelectVal(dom);
case 'radio':
return methods.getRadioVal(dom);
case 'checkbox':
return methods.getCheckBoxVal(dom);
default:
return '';
}
}; var domType = json.Type;
var doms = $(json.Doms);
var count = doms.length;
if (count > 1) {
var val = '';
var index = 0;
for (var i = 0; i < count; i++) {
var v = dispacher(domType, doms.eq(i));
if (v == '' || v == null || v == undefined)
continue;
val += index++ == 0 ? dispacher(domType, doms.eq(i)) : (',' + dispacher(domType, doms.eq(i)));
}
return val;
} else {
return dispacher(domType, doms);
}
};
})(jQuery);

将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。的更多相关文章

  1. 第一百五十九节,封装库--JavaScript,表单序列化结合ajax提交数据

    封装库--JavaScript,表单序列化结合ajax提交数据 封装库,表单序列化方法 /** xu_lie_biao_dan()方法,表单序列化方法,将自动获取指定表单里面的各项字段name值和va ...

  2. (转)jquery serialize表单序列化,当radio或checkbox 未选中时,没有序列化到对象中的原因分析和解决方案 - ghostsf

    相信很多人都用过jq的表单序列化serialize()方法,因为这能很方便地帮你把表单里所有的非禁用输入控件序列化为 key/value 对象,不需要你再去一个个地拼接参数了. 这是一个很好用的函数, ...

  3. jQuery实现form表单序列化转换为json对象功能示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).

    Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.引入依赖js <script src=& ...

  5. Jquery表单序列化和AJAX全局事件

    Jquery表单序列化 1.必须放在form标签内: 2.控件必须有name属性: 3.控件的value值会提交到服务器: 如: <form id="form1"> & ...

  6. 判断一个jquery对象是否为空

    今天用jquery $获取一个jquery对象.$("#id") 然后用判断这个对象是否存在,id不存在的时候,判断这个是否存在, if($("#id")) 始 ...

  7. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. $ 和getElementId的区别 / 一个jquery对象的原型

    请说出 div 和 $div 的联系和区别 区别 div 返回一个HTML DOM Object $div 返回一个 jQuery Object, 两者不等价 $div是包装了dom对象后产生的,无法 ...

  9. jquery ajax(5)form表单序列化

    form表单序列化<script type="text/javascript"> $(function(){ $("#send").click(fu ...

随机推荐

  1. u-boot-2014_04在TQ2440上的移植

    本文详细介绍了新版本的u-boot-2014_04在tq2440平台上的移植过程,期间参考了网上的其他移植文档,还有韦东山的移植uboot视频,讲的很好.下面是共享链接,欢迎下载,一同学习.其中有移植 ...

  2. 启用nginx报错80端口被占用

    最近在本机跑nginx,启动后报错,怀疑80端口被占用 netstat -ano|findstr 尝试一:查看后发现端口被一个System pid 为4的一个程序占用.我在资源管理器中尝试将Syste ...

  3. Java学习笔记之equals和Objects.equals

    equals 相信大家就知道,就是比较,我们平时也会在自己定义的类中加入自己重写的equals用来比较两个类是否相同,例如这样 public class Person { private String ...

  4. android 二维码制作,显示到UI,并保存SD卡,拿来就能用!!

    转载请注明出处:王亟亟的大牛之路 如今二维码已经渗透了我们的生活.各种扫码关注啊.扫码下载的,今天上一个依据输入内容生成二维码的功能. 包结构: 界面截图: 功能:输入网址–>生成图片–> ...

  5. iOS将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法

    demo下载地址 http://pan.baidu.com/s/1pLcpKpl 1.Unity导出工程时设置bundle id要与项目一致 2.修改bit code为NO 3.删除Main.stor ...

  6. Domino Angular 前端UI开发

    因为如今前端的要求越来越专业化,不少企业已经有前端的专业职位了.当然我们dominio软件企业.有些也在特意招一些前端的project师. 比方如今流程的多平台(之前我的有教程).就必需要有专业的UI ...

  7. SELinux状态修改

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  8. python的进程和线程

    关于进程: An executing instance of a program is called a process.程序的执行实例称为进程. Each process provides the ...

  9. how to add them, how to multiply them

    http://www.physics.miami.edu/~nearing/mathmethods/operators.pdf

  10. jQuery-AJAX-格式

    function loadInfo(){    var domainName=$("input[name='domain-name']").val(); //域名    var c ...