`
zhengxinlong
  • 浏览: 5477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

jQuery序列化Html表单

阅读更多

    将任意一个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);

 

1
0
分享到:
评论

相关推荐

    jQuery序列化form表单数据为JSON对象的实现方法

    主要介绍了jQuery序列化form表单数据为JSON对象的实现方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    jquery序列化form表单使用ajax提交后处理返回的json数据

    主要介绍了jquery序列化form表单,使用ajax提交后处理返回的json数据的示例,需要的朋友可以参考下

    jquery序列化表单去除指定元素示例代码

    主要介绍了如何使用jquery序列化表单去除指定元素,需要的朋友可以参考下

    JQuery扩展包-多种序列化方式

    Jquery自带的序列化,仅对form表单进行序列化,有很大的局限性,现在对齐进行扩展可以进行任意的序列化,包括json格式,字符串格式、数组格式,数组时自动转化为字符串等。并可以根据开发需要,随时扩展自己想要的...

    jQuery序列化后的表单值转换成Json

    通过$(#form).serializeArray()输出以数组形式序列化表单值。 [ {name: 'firstname', value: 'Hello'}, {name: 'lastname', value: 'World'}, {name: 'alias'}, // 值为空 ] 统统不满足小朋友想得到Json的愿望。...

    form表单的序列化与反序列化

    基于jquery实现的form表单的序列化与反序列化。除了基本的form元素外,增加了easyui combobox的序列化与反序列化,其它类型的如有需要可自行实现。 下拉框会怎么生成以"_autoAppText"的属性记录文本,反序列时,会...

    jQuery将表单序列化成一个Object对象的实例

    jQuery中提供了jQuery.serizlizeArray来将表单序列化成一个数组。尽管如此,数组还是不方便我们操作,我需要讲表单序列化成一个对象。这样更方便于我们操作。   下面是代码: /** * @author gaohuia */ ...

    关于jquery form表单序列化的注意事项详解

    本文主要给大家介绍的是关于jquery form表单序列化的一些注意事项,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 我们先来讲讲表单中 中readonly和disabled的区别: readonly只对input和textarea...

    jQuery-serialize()输出序列化form表单值的方法

    实例 输出序列化表单值的结果: 代码如下: $(“button”).click(function(){ $(“div”).text($(“form”).serialize()); }); 定义和用法 serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。 您可以选择...

    jquery序列化表单以及回调函数的使用示例

    使用jQuery提供的表单序列化方法可以很好的解决JSP表单中一个个传值的问题,下面有个示例,大家可以参考下

    jQuery序列化表单成对象的简单实现

    下面小编就为大家带来一篇jQuery序列化表单成对象的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JQuery表单提交和后台交互源码20130509

    JQuery表单提交和后台交互源码 源码描述: jQuery表单提交和后台交互,非常简单。 也许你习惯了使用基于jQuery的表单插件,裸写也...方式2、页面序列化后放在data中,传递到后台 注:此种方式需设置页面控件的name属性

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

    本文实例讲述了jQuery实现form表单序列化转换为json对象功能。分享给大家供大家参考,具体如下: 做web前端开发时,需要ajax提交大量表单数据,如果一个个form字段拼接很费劲也容易出错,下面方法可解决这个问题 &...

    jQuery实现form表单元素序列化为json对象的方法

    这段代码序列化form表单元素为json对象: &lt;!Doctype html&gt; &lt;html xmlns=http://www.w3.org/1999/xhtml&gt; &lt;head&gt; &lt;title&gt;jQuery扩展——form序列化到json对象&lt;/title&gt; &lt;meta ...

    jquery序列化方法实例分析

    本文实例讲述了jquery序列化方法。分享给大家供大家参考。具体分析如下: 做ajax的时候,经常需要序列化, serialize()只能序列化表单 。(注 : 表单里的内容 只能用 name ) 现在有一个对象: 代码如下:var obj={...

Global site tag (gtag.js) - Google Analytics