Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/06/2015, 17:46
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Guardar Formulario en LocalStorage

Bienvenido a FDW.

Te va a tocar guardar dato por dato pues no hay manera de que puedas tomar los datos de todos los elementos del formulario con una sola instrucción.

Podrías hacer algo como esto:

Código Javascript:
Ver original
  1. var elForm = document.querySelector("#form1"), //O simplemente 'form1'
  2.     valores = []; //Array en el que se guardarán los valores
  3.  
  4. [].forEach.call(elForm.elements, function(elemento){ //Recorro el conjunto de elementos
  5.     valores.push(elemento.value); //Guardo el valor de cada elemento en el array
  6. });
  7.  
  8. //Guardo todo de manera local
  9. localStorage.form1 = JSON.stringify({
  10.     elementos: elForm.innerHTML, //Los elementos del formulario
  11.     id: elForm.id || "", //El 'id' del formulario o una cadena vacía
  12.     method: elForm.method || "GET", //El método establecido o "GET"
  13.     action: elForm.action || "", //La dirección hacia la que se enviarán los datos o una cadena vacía
  14.     enctype: elForm.enctype || "", //El tipo de contenido del formulario o una cadena vacía
  15.     datos: valores //El array con los valores de los elementos del formulario
  16. });

Y para recuperarlo:

Código Javascript:
Ver original
  1. var guardado = JSON.parse(localStorage.form1), //Recupero todos los datos guardados
  2.     form = document.createElement("form"); //Creo un nuevo formulario
  3.  
  4. form.id = guardado.id; //Le asigno el 'id' guardado
  5. form.method = guardado.method; //Le asigno el 'method' guardado
  6. form.action = guardado.action; //Le asigno el 'action' guardado
  7. form.enctype = guardado.enctype; //Le asigno el 'enctype' guardado
  8. form.innerHTML = guardado.elementos; //Le asigno los elementos guardados
  9.    
  10. //Asigno los valores a los elementos
  11. for (var i = 0, els = form.elements, l = els.length; i < l; i++){
  12.     els[i].value = guardado.datos[i];
  13. }
  14.  
  15. document.body.appendChild(form); //Añado el formulario al documento

Como la cantidad de valores guardados debe de coincidir con la cantidad de elementos del formulario, uso un bucle que recorra al primer conjunto y, en cada iteración, asigno los valores a los campos.

Cabe recordar que para guardar localmente datos de múltiples tipos, lo aconsejable es guardarlos en un objeto literal y luego darle formato JSON (tal y como lo hice en este ejemplo). Para recuperarlos, hay que quitarle dicho formato y se podrá acceder a los valores guardados como se haría con cualquier objeto literal, ya sea mediante la notación por puntos o por corchetes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 01/06/2015 a las 18:26 Razón: Mejora