¿Cómo conservo las variables de un formulario al hacer cambios?

De TW

Saltar a: navegación, buscar
Este artículo ha sido reformateado automáticamente desde http://www.tejedoresdelweb.com/307/article-69804.html y su formato necesita ser revisado
Quiero poder cambiarme de página y que ciertas variables de un formulario se conserven.

Hay dos formas básicas de lograr esto.

Utilizando [article-1065.html cookies]: esto requiere que cada vez que el usuario modifique algún campo del formulario, se genere un evento que almacene una cookie en el lado del cliente, y cada vez que un formulario se despliegue, los valores de esta cookie sean utilizados por el servidor, por ejemplo, en el lado del cliente pondríamos:

<input name="MiVariable"
       onChange="SetCookie( 'MiVariable', this.value)">

Y en el lado del servidor (por ejemplo usando perl con CGI.pm):

print $cgi->textfield(
   -name=>'MiVariable',
    -default=>$cgi->cookie('MiVariable')
);

O lo que corresponda a la implementación de cookies del lenguaje que estamos usando. Esto también se puede hacer solamente en el lado del cliente, usando el evento onLoad.

<BODY onload="cargaVariables()">
<script>
function cargaVariables() {
  var f = document.MiFormulario;
  f.MiVariable.value = GetCookie( 'MiVariable');
}
</script>

Pasando los parámetros en la URL: esto requiere que cada vez que se modifica una variable, el formulario sea enviado al servidor, y que el método sea GET, por ejemplo:

<form name="MiFormulario">
<input name="MiVariable"
       onChange="document.MiFormulario.submit()">

Ahora, supongamos que queremos ir a otra página pero alterando solamente un parámetro, por ejemplo, supongamos que hay una variable oculta que se llama "idioma", y queremos cambiar esta variable sin cambiar nada del formulario. Lo que tenemos que hacer es pedir al entorno CGI que nos diga cuál es nuestra URL actual, luego cambiar la variable que nos interesa y luego mostrar el link. En perl con CGI.pm se hace así:

my $idioma_anterior = $cgi->param( "idioma" );
$cgi->param("idioma", "nuevo_idioma");
my $link = $cgi->self_url();
print "<a href='$link'>cambiar idioma</a>";
$cgi->param("idioma", $idioma_anterior );

Esta construcción tiene cinco líneas. La primera guarda el valor de la variable actual y la última la reestablece. Las tres del medio simplemente modifican un parámetro del CGI y luego piden un enlace a la URL actual, haciendo creer a CGI.pm que ya hemos cambiado de página. La cuarta linea muestra este enlace al usuario.