Foros del Web » Programando para Internet » Javascript »

Guardar valor en campos dinamicos

Estas en el tema de Guardar valor en campos dinamicos en el foro de Javascript en Foros del Web. Hola de nuevo. Estoy aprendiendo a programar y quise empezar con una pagina de letras. Lo que estoy haciendo ahora es un formulario que permita ...
  #1 (permalink)  
Antiguo 28/01/2011, 17:32
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 10 meses
Puntos: 1
Guardar valor en campos dinamicos

Hola de nuevo. Estoy aprendiendo a programar y quise empezar con una pagina de letras. Lo que estoy haciendo ahora es un formulario que permita ingresar un disco a la pagina. Como los discos no tienen siempre la misma cantidad de temas, lo que hice fue un campo en el que se puedan ingresarla cantidad de temas que tiene el disco y que la pagina muestre el numero de campos de texto correspondientes para ingresar los nombres de todos los temas.

El problema que me encontre es que si un usuario ingresa la cantidad de temas, despues todos los nombres de los temas y al final se da cuenta que en realidad el disco tiene un tema mas, entonces al cambiar el numero de temas, los valores de todos los demas campos se borran. O sea, tiene que ingresar todo de nuevo.

El codigo que tenia en mente y que pensaba que podia funcionar es el siguiente:

Código Javascript:
Ver original
  1. var temas = getXmlHttpRequestObject();
  2.  
  3. var cantidadanterior = 0;
  4.  
  5. function cantidadTemas() {
  6.     if (temas.readyState == 4 || temas.readyState == 0) {
  7.         var str = document.getElementById('cantidad').value;
  8.         if (!isInteger(str) ) {
  9.             return;
  10.         }
  11.         var ss = document.getElementById('temas')
  12.         ss.innerHTML = '';
  13.         var x = new Array();
  14.         if (cantidadanterior != 0) {
  15.             for (i=1;i<=cantidadanterior;i++) {
  16.                 eval("x[i] = document.getElementById('tema"+i+"').value");
  17.             }
  18.         }
  19.         for (i=1 ; i<=str; i++) {
  20.             var sugges = i + '. <br /><input type="text" id="tema' + i + '" name="tema' + i +'" autocomplete="off" /><br />';
  21.             ss.innerHTML += sugges;
  22.             if (cantidadanterior != 0) {
  23.                 eval("document.getElementById('tema"+i+"').value = x[i]");
  24.             }
  25.             if (i==str) {
  26.                 ss.innerHTML += '<br />';
  27.             }
  28.         }
  29.         cantidadanterior = document.getElementById('cantidad').value;
  30.     }
  31. }

Obviamente, ese codigo no funciona y es por eso que hago la consulta. Supongo que habra otras formas, pero no encuentro como.

Muchas Gracias.
  #2 (permalink)  
Antiguo 29/01/2011, 09:22
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Guardar valor en campos dinamicos

crea un campo y clonalo con con el método cloneNode()
  #3 (permalink)  
Antiguo 29/01/2011, 09:38
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Guardar valor en campos dinamicos

No conozco bastante esa funcion pero por lo que vi me clonaria todo el campo. El problema es que al clonar todo el campo, tambien clonaria la id por lo cual no la podria diferenciar a la hora de pasar el formulario para que se guarde en la base de datos.

Actualizo:

Encontre la solucion. El error en el codigo de arriba fue que yo tomaba los valores de los campos despues del ss.innerHTML = '' osea que cuando buscaba los valores no habia nada porque ya se habia borrado todo.

Despues el problema era que no me asignaba el valor al campo. No se porque no me dejaba ingresar los valores en el for en el que creo el campo. Asi que lo solucione haciendo otro for. Ahora hay dos for, uno que crea los campos y otro que les asigna el valor que tenian antes del cambio.

Finalmente el codigo quedo asi:

Código Javascript:
Ver original
  1. var cantidadanterior = 0;
  2.  
  3. var x = new Array();
  4.  
  5. function cantidadTemas() {
  6.         var str = document.getElementById('cantidad').value;
  7.         if (!isInteger(str) ) {
  8.             return;
  9.         }
  10.         if (cantidadanterior != 0) {
  11.             for (i=1;i<=cantidadanterior;i++) {
  12.                 x[i] = document.getElementById('tema'+i).value;
  13.             }
  14.         }
  15.         var ss = document.getElementById('temas')
  16.         ss.innerHTML = '';
  17.         for (i=1 ; i<=str; i++) {
  18.             var sugges = i + '. <br /><input type="text" id="tema' + i + '" name="tema' + i +'" autocomplete="off" ';
  19.             sugges += '/><br />';
  20.             if (i==str) {
  21.                 sugges += '<br />';
  22.             }
  23.             ss.innerHTML += sugges;
  24.         }
  25.         for (i=1 ; i<=str; i++) {
  26.             if (cantidadanterior != 0 && typeof x[i] != 'undefined') {
  27.                 document.getElementById('tema'+i).value = x[i];
  28.             }
  29.         }
  30.         cantidadanterior = document.getElementById('cantidad').value;
  31. }

Última edición por solovoy; 29/01/2011 a las 10:15
  #4 (permalink)  
Antiguo 29/01/2011, 14:59
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Guardar valor en campos dinamicos

Cita:
Iniciado por solovoy Ver Mensaje
No conozco bastante esa funcion pero por lo que vi me clonaria todo el campo. El problema es que al clonar todo el campo, tambien clonaria la id por lo cual no la podria diferenciar a la hora de pasar el formulario para que se guarde en la base de datos.
la id no se usa para recoger los campos e insertarlos, se usa el atributo name. en cuanto a que se clona la id, tienes razón pero se salva con algo como esto
Cita:
var f = campoaclonar.cloneNode(true);
f.id = '';
con una cuatro o cinco líneas de código está hecho

Etiquetas: campos, dinamicos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:20.