views:

78

answers:

4

I'm looking for a jQuery function or plugin that serializes form inputs to an object using the naming convention for deep-serialization supported by param() in jQuery 1.4:

<form>
  <input name="a[b]" value="1"/>
  <input name="a[c]" value="2"/>
  <input name="d[]" value="3"/>
  <input name="d[]" value="4"/>
  <input name="d[2][e]" value="5"/>
</form>

$('form').serializeObject(); // { a: { b:"1",c:"2" }, d: ["3","4",{ e:"5" }] }

Prototype's Form.serialize method can do exactly this. What's the jQuery equivalent? I found this plugin but it doesn't follow this naming convention.

A: 

try using jquery form plugin. I haven't tested it, but I think it will fix your problem

http://jquery.malsup.com/form/

Starx
I don't see anything in the [API](http://jquery.malsup.com/form/#api) that does what I want.
John
A: 

You do not need pluging.

$('form').submit(function() { alert($(this).serializeArray()); return false; });

look at http://api.jquery.com/serializeArray/

serializeArray does not do what I asked; it would produce [{name: "a[b]", value: "1"}, {name: "a[c]", value: "2"}, ...].
John
A: 

Since there didn't seem to be any existing libraries that accomplished what I was seeking, I mashed up bits from a couple of existing libraries that did similar things:

  • The jQuery.deparam function from jQuery BBQ
  • The jQuery.serializeObject function mentioned in the question.

Both are by Ben Alman. Thanks, Ben!

The result: http://gist.github.com/405448

John
A: 

Maybe late, but there's a jQuery plugin thad does what you need.

http://v3.javascriptmvc.com/index.html#&amp;who=jQuery.fn.formParams

rjack