Skip to content
Permalink
Browse files

Fix #12134. Make .serialize() HTML5-compliant; provide a propHook for…

… shimming.
  • Loading branch information...
dmethvin committed Nov 25, 2012
1 parent a938d7b commit ae215fdcf843862dbddbdfd68117ac2926e35a42
Showing with 12 additions and 13 deletions.
  1. +12 −13 src/serialize.js
@@ -1,21 +1,26 @@
var r20 = /%20/g,
rbracket = /\[\]$/,
rCRLF = /\r?\n/g,
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
rselectTextarea = /^(?:select|textarea)/i;
rcheckTypes = /^(?:checkbox|radio)$/i,
rsubmitterTypes = /^(?:submit|button|image|reset)$/i,
rsubmittable = /^(?:select|textarea|input|keygen)/i;

jQuery.fn.extend({
serialize: function() {
return jQuery.param( this.serializeArray() );
},
serializeArray: function() {
return this.map(function(){
return this.elements ? jQuery.makeArray( this.elements ) : this;
// 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(){
return this.name && !this.disabled &&
( this.checked || rselectTextarea.test( this.nodeName ) ||
rinput.test( this.type ) );
var type = this.type;
// Use .is(":disabled") so that fieldset[disabled] works

This comment has been minimized.

@Krinkle

Krinkle Nov 25, 2012

Member

Can you elaborate on this? How does it help that by making a jQuery object and using a selector match instead of a property check?

This comment has been minimized.

@dmethvin

This comment has been minimized.

@Krinkle

Krinkle Nov 25, 2012

Member

Thanks! I understand now. Comment could've been a more elaborate by mentioning the parent relationship to fieldset.

return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckTypes.test( type ) );
})
.map(function( i, elem ){
var val = jQuery( this ).val();
@@ -77,13 +82,7 @@ function buildParams( prefix, obj, traditional, add ) {
add( prefix, v );

} else {
// If array item is non-scalar (array or object), encode its
// numeric index to resolve deserialization ambiguity issues.
// Note that rack (as of 1.0.0) can't currently deserialize
// nested arrays properly, and attempting to do so may cause
// a server error. Possible fixes are to modify rack's
// deserialization algorithm or to provide an option or flag
// to force array serialization to be shallow.
// Item is non-scalar (array or object), encode its numeric index.
buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
}
});

0 comments on commit ae215fd

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.