In jQuery possiamo serializzare un form come oggetto JSON specificando il tipo di dati.
La soluzione è la seguente:
"use strict";
$.jsonSerialize = function( form ) {
var obj = {};
form.find( "input, select, textarea" ).each(function() {
var $input = $( this );
var name = $input.attr( "name" );
var value = $input.val();
var v;
if( $input.hasClass( "serialize-array" ) ) {
if( value.indexOf( "," ) !== -1 ) {
v = value.split( "," );
} else {
v = ( value.length > 0 ) ? [value] : [];
}
} else {
v = value;
}
if( $input.hasClass( "serialize-number" ) ) {
v = parseInt( value, 10 );
}
if( $input.hasClass( "serialize-date" ) ) {
var elDate = Date.parse( value );
if( !isNaN( elDate ) ) {
v = new Date( elDate );
} else {
v = new Date();
}
}
if( typeof name !== "undefined" ) {
obj[name] = v;
}
});
return obj;
};
Gli elementi del form possono avere le seguenti classi:
Classe | Tipo di dati |
---|---|
serialize-array | Array |
serialize-number | Number |
serialize-date | Date |
Quando si specifica una di queste classi su un elemento, il suo valore verrà convertito nel valore di riferimento.