| define( [ |
| "./core", |
| "./core/toType", |
| "./var/rcheckableType", |
| "./var/isFunction", |
| "./core/init", |
| "./traversing", // filter |
| "./attributes/prop" |
| ], function( jQuery, toType, rcheckableType, isFunction ) { |
| |
| "use strict"; |
| |
| var |
| rbracket = /\[\]$/, |
| rCRLF = /\r?\n/g, |
| rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, |
| rsubmittable = /^(?:input|select|textarea|keygen)/i; |
| |
| function buildParams( prefix, obj, traditional, add ) { |
| var name; |
| |
| if ( Array.isArray( obj ) ) { |
| |
| // Serialize array item. |
| jQuery.each( obj, function( i, v ) { |
| if ( traditional || rbracket.test( prefix ) ) { |
| |
| // Treat each array item as a scalar. |
| add( prefix, v ); |
| |
| } else { |
| |
| // Item is non-scalar (array or object), encode its numeric index. |
| buildParams( |
| prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", |
| v, |
| traditional, |
| add |
| ); |
| } |
| } ); |
| |
| } else if ( !traditional && toType( obj ) === "object" ) { |
| |
| // Serialize object item. |
| for ( name in obj ) { |
| buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); |
| } |
| |
| } else { |
| |
| // Serialize scalar item. |
| add( prefix, obj ); |
| } |
| } |
| |
| // Serialize an array of form elements or a set of |
| // key/values into a query string |
| jQuery.param = function( a, traditional ) { |
| var prefix, |
| s = [], |
| add = function( key, valueOrFunction ) { |
| |
| // If value is a function, invoke it and use its return value |
| var value = isFunction( valueOrFunction ) ? |
| valueOrFunction() : |
| valueOrFunction; |
| |
| s[ s.length ] = encodeURIComponent( key ) + "=" + |
| encodeURIComponent( value == null ? "" : value ); |
| }; |
| |
| if ( a == null ) { |
| return ""; |
| } |
| |
| // If an array was passed in, assume that it is an array of form elements. |
| if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { |
| |
| // Serialize the form elements |
| jQuery.each( a, function() { |
| add( this.name, this.value ); |
| } ); |
| |
| } else { |
| |
| // If traditional, encode the "old" way (the way 1.3.2 or older |
| // did it), otherwise encode params recursively. |
| for ( prefix in a ) { |
| buildParams( prefix, a[ prefix ], traditional, add ); |
| } |
| } |
| |
| // Return the resulting serialization |
| return s.join( "&" ); |
| }; |
| |
| jQuery.fn.extend( { |
| serialize: function() { |
| return jQuery.param( this.serializeArray() ); |
| }, |
| serializeArray: function() { |
| return this.map( function() { |
| |
| // Can add propHook for "elements" to filter or add form elements |
| var elements = jQuery.prop( this, "elements" ); |
| return elements ? jQuery.makeArray( elements ) : this; |
| } ) |
| .filter( function() { |
| var type = this.type; |
| |
| // Use .is( ":disabled" ) so that fieldset[disabled] works |
| return this.name && !jQuery( this ).is( ":disabled" ) && |
| rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && |
| ( this.checked || !rcheckableType.test( type ) ); |
| } ) |
| .map( function( i, elem ) { |
| var val = jQuery( this ).val(); |
| |
| if ( val == null ) { |
| return null; |
| } |
| |
| if ( Array.isArray( val ) ) { |
| return jQuery.map( val, function( val ) { |
| return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; |
| } ); |
| } |
| |
| return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; |
| } ).get(); |
| } |
| } ); |
| |
| return jQuery; |
| } ); |