Pregunta
¿Cómo obtener los valores de un formulario con Javascript?
Responder esta pregunta por dudin el 2008-11-25
Quiero obtener los valores de un formulario html mediante Javascript y formatearlos de la siguiente manera "campo1=valor1& campo2=valor2& campo3=valor3".
Respuestas
function form_params( id )
{
var params = new Array()
form = document.getElementById(id);
var length = form.elements.length
for( var i = 0; i < length; i++ )
{
element = form.elements[i]
if(element.tagName.toLowerCase() == 'textarea' )
{
params[element.name] = element.value
}
else if( element.tagName.toLowerCase() == 'input' )
{
if( element.type == 'text' || element.type == 'hidden' || element.type == 'password')
{
params[element.name] = element.value
}
else if( element.type == 'radio' && element.checked )
{
if( !element.value )
params[element.name] = "on"
else
params[element.name] = element.value
}
else if( element.type == 'checkbox' && element.checked )
{
if( !element.value )
params[element.name] = "on"
else
params[element.name] = element.value
}
}
}
return params;
}
form_params devuelve un arreglo con todos los elementos del formulario de la forma llave->valor a partir del id del elemento formulario. Ya disponibles todos los valores y llaves sólo le faltaría convertirlos a la cadena.
por Anónimo el 2008-11-25
Si estás usando la librería Javascript Prototype, la misma dispone del método serialize() que hace esta operación de forma mágica:
$('mi-formulario').serialize()
Referencia:http://www.prototypejs.org/api/form/serialize por Anónimo el 2008-11-26
Otra forma de hacerlo si no usas una librería sería:
function serialize(form) {
if (!form || !form.elements) return;
var serial = [], i, j, first;
var add = function (name, value) {
serial.push(encodeURIComponent(name) + '=' + encodeURIComponent(value));
}
var elems = form.elements;
for (i = 0; i < elems.length; i += 1, first = false) {
if (elems[i].name.length > 0) { /* no incluye los elementos sin nombre */
switch (elems[i].type) {
case 'select-one': first = true;
case 'select-multiple':
for (j = 0; j < elems[i].options.length; j += 1)
if (elems[i].options[j].selected) {
add(elems[i].name, elems[i].options[j].value);
if (first) break; /* detiene la búsqueda para select-one */
}
break;
case 'checkbox':
case 'radio': if (!elems[i].checked) break; /* sino continúa */
default: add(elems[i].name, elems[i].value); break;
}
}
}
return serial.join('&');
}
por Anónimo el 2008-11-26



