Skip to main content

Bug Tracker

Side navigation

#11312 closed enhancement (duplicate)

Opened February 09, 2012 05:07PM UTC

Closed February 09, 2012 05:44PM UTC

Last modified February 09, 2012 05:44PM UTC

Suggestion: .serializeObj()

Reported by: wheresrhys@gmail.com Owned by:
Priority: undecided Milestone: None
Component: unfiled Version:
Keywords: Cc:
Blocked by: Blocking:
Description

It'd be useful to add a .serializeObj() method. At present, after running serializeArray() one must loop through the array checking each entry for its name and eventually getting to the value. If there was an option to serialize a form as a simple key value object it'd eliminate the need to run these loops and make form data available in a far more easily interchangeable format for passing around as parameters

In fact, it could be a good API to offer

.serialize([type]) (type = "string", "object" or "array")
. I've had a go at implementing this below (not sure if I got the multivalued field bit right though)

serialize: function(type) {
    var obj, els = this.map(function(){
            return this.elements ? jQuery.makeArray( this.elements ) : this;
        })
        .filter(function(){
            return this.name && !this.disabled &&
                ( this.checked || rselectTextarea.test( this.nodeName ) ||
                    rinput.test( this.type ) );
        });
    
    if (type === "object") {
        els.each(function( i, elem ){
            var val = jQuery( this ).val();
            if(val != null) {
                if (jQuery.isArray( val )) {
                    val = jQuery.map( val, function( val, i ){
                        return val.replace( rCRLF, "\\r\\n" );
                    })
                } else {
                    val = val.replace( rCRLF, "\\r\\n" );
                }
            }
            obj[elem.name] = val;
        })
        return obj;
    } else {
        els = els.map(function( i, elem ){
            var val = jQuery( this ).val();
      
            return val == null ?
                null :
                    jQuery.isArray( val ) ?
                        jQuery.map( val, function( val, i ){
                          return { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };
                        }) :
                        { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };
            }).get();
        }
        return (type === "array") ? els : jQuery.param( els );
    }
},

serializeArray: function() {
    return this.serialize("array");
});
Attachments (0)
Change History (2)

Changed February 09, 2012 05:44PM UTC by dmethvin comment:1

resolution: → duplicate
status: newclosed

Changed February 09, 2012 05:44PM UTC by dmethvin comment:2

Duplicate of #11002.