I try to use the prototype form method called serializeElements, to
get all elements in form and build a JSON var.
It work, but not in the best way.
It method get all fields in a form and build a JSON, but it dont put
JSON inside JSON.
Example:
If i have the follow form:
input name="person.name"
input name="person.age"
input name="person.address.street"
The serializeElements's method build a JSON like this
{ "person.name": "??", "person.age": "??", "person.address.street":
"??" }
With my modified method the JSON will be generated like this
{ name: "??", age: "??", address: { street: "??" } }
Or
{ car: { name: "??", age: "??", address: { street: "??" } } }
What are you think about this method?
Can i add this method in prototype framework? How?
/**
* Serialize a form into a JSON var
*
* How to use:
*
* var json = formToJSON('form_test', { prefix : 'car.', exclude:
['description'] } );
*
* <form id="form_test">
* <input type="text" name="car.id" value="2" />
* <input type="text" name="car.name" value="Z5" />
* <input type="text" name="car.description" value="Sport car" />
* <select name="car.company.id">
* <option value="1" selected="selected">BMW</value>
* <option value="2">Mercedes</value>
* </select>
* <input type="checkbox" name="car.optionals" value="carsound"
checked="checked">Car Sound
* <input type="checkbox" name="car.optionals" value="gps">GPS
* <input type="checkbox" name="car.optionals" value="absbreak"
checked="checked">ABS Break
* </form>
*
* The example above will generate the folow JSON.
*
* { id: '2', name: 'Z5', company: { id: 1 }, optionals: ['carsound',
'absbreak'] }
*/
function formToJSON(form, options) {
elements = $(form).getElements();
if (typeof options != 'object') options = { hash: !!options };
else if (Object.isUndefined(options.hash)) options.hash = true;
var key, value, submitted = false, submit = options.submit;
var data = elements.inject({ }, function(result, element) {
if (!element.disabled && element.name) {
key = element.name;
value = $(element).getValue();
if (value != null && (element.type != 'submit' || (!submitted &&
submit !== false && (!submit || key == submit) &&
(submitted
= true)))) {
key = ( !Object.isUndefined(options.prefix) ) ?
key.replace(options.prefix,"") : key;
if( Object.isArray(options.exclude) )
if( options.exclude.indexOf(key) != -1 )
return result;
if( key.indexOf(".") != -1 ) {
var processkey = key;
var tree = "";
while( processkey.indexOf(".") != -1 ) {
var newkey = processkey.substring( 0,
processkey.indexOf(".") );
processkey = processkey.replace( newkey
+ ".", "" );
tree += (tree == "") ? newkey : "." +
newkey;
if( eval("result." + tree) == undefined
||
eval("result." + tree) == null )
eval("result." + tree + " = new
Object()") ;
if( processkey.indexOf(".") ==
-1 )
if( processkey in eval(
"result." + tree ) ) {
if (
!Object.isArray( eval( "result." + tree + "." +
processkey ) ) )
eval("result." + tree + "." + processkey + " = [ result." +
tree + "." + processkey + "]");
eval("result."
+ tree + "." + processkey +
".push(value)");
} else
eval("result." + tree +
"." + processkey + " =
value");
}
} else
if (key in result) {
if ( !Object.isArray( result[key] ) )
result[key] = [ result[key] ];
result[key].push(value);
} else
result[key] = value;
}
}
return result;
});
return options.hash ? data : Object.toQueryString(data);
};
thx,
Thiago Antonius
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---