/* * serializeForm * https://github.com/danheberden/serializeForm * * Copyright (c) 2012 Dan Heberden * Licensed under the MIT, GPL licenses. */ (function( $ ){ $.fn.serializeForm = function() { // don't do anything if we didn't get any elements if ( this.length < 1) { return false; } var data = {}; var lookup = data; //current reference of data var selector = ':input[type!="checkbox"][type!="radio"], input:checked'; var parse = function() { // Ignore disabled elements if (this.disabled) { return; } // data[a][b] becomes [ data, a, b ] var named = this.name.replace(/\[([^\]]+)?\]/g, ',$1').split(','); var cap = named.length - 1; var $el = $( this ); // Ensure that only elements with valid `name` properties will be serialized if ( named[ 0 ] ) { for ( var i = 0; i < cap; i++ ) { // move down the tree - create objects or array if necessary lookup = lookup[ named[i] ] = lookup[ named[i] ] || ( (named[ i + 1 ] === "" || named[ i + 1 ] === '0') ? [] : {} ); } // at the end, push or assign the value if ( lookup.length !== undefined ) { lookup.push( $el.val() ); }else { lookup[ named[ cap ] ] = $el.val(); } // assign the reference back to root lookup = data; } }; // first, check for elements passed into this function this.filter( selector ).each( parse ); // then parse possible child elements this.find( selector ).each( parse ); // return data return data; }; }( jQuery ));