Permalink
Browse files

serializeObject hooray

  • Loading branch information...
0 parents commit 53da44b5459b8ff62fba70a3592abdcb2d2f68ba @danheberden committed Apr 1, 2011
Showing with 65 additions and 0 deletions.
  1. +26 −0 README
  2. +39 −0 jquery.serializeObject.js
26 README
@@ -0,0 +1,26 @@
+$.fn.serializeObject makes an object out of form elements inside of the specified item.
+
+Example:
+<div id="test">
+ <input name="text1" value="txt-one" />
+ <checkbox name="top[child][]" value="1" checked="checked" />
+ <checkbox name="top[child][]" value="2" checked="checked" />
+ <checkbox name="top[child][]" value="3" checked="checked" />
+
+ <select name="another[select]">
+ <option value="opt"></option>
+ </select>
+</div>
+
+$( '#test' ).serializeObject();
+
+Returns
+
+{ text1: "txt-one",
+ top: {
+ child: [ 1, 2, 3 ]
+ },
+ another: {
+ select: "opt"
+ }
+}
@@ -0,0 +1,39 @@
+/*
+* .serializeObject (c) Dan Heberden
+* danheberden.com
+*
+* Gives you a pretty object for your form elements
+*/
+(function($){
+ $.fn.serializeObject = function( trimKey ) {
+ if ( !this.length ) { return false; }
+
+ var $el = this,
+ data = {},
+ lookup = data; //current reference of data
+
+ $el.find(':input[type!="checkbox"][type!="radio"], input:checked').each(function() {
+ // data[a][b] becomes [ data, a, b ]
+ var named = this.name.replace(/\[([^\]]+)?\]/g, ',$1').split(','),
+ cap = named.length - 1;
+
+ for ( var i = trimKey ? 1 : 0 ; i < cap; i++ ) {
+ // move down the tree - create objects or array if necessary
+ lookup = lookup[ named[i] ] = lookup[ named[i] ] ||
+ ( named[i+1] == "" ? [] : {} );
+ }
+
+ // at the end, psuh or assign the value
+ if ( lookup.length != undefined ) {
+ lookup.push( $(this).val() );
+ }else {
+ lookup[ named[ cap ] ] = $(this).val();
+ }
+
+ // assign the reference back to root
+ lookup = data;
+ });
+
+ return data;
+ };
+})(jQuery);

0 comments on commit 53da44b

Please sign in to comment.