Foros del Web » Programando para Internet » Javascript »

Comprobar un número indefinido de campos

Estas en el tema de Comprobar un número indefinido de campos en el foro de Javascript en Foros del Web. Hola a todos: He creado un formulario para actualizar una BD con discos de música. Cada disco de entre todos los que hay en el ...
  #1 (permalink)  
Antiguo 02/09/2010, 07:10
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Comprobar un número indefinido de campos

Hola a todos:

He creado un formulario para actualizar una BD con discos de música. Cada disco de entre todos los que hay en el mundo tiene un número distinto de pistas, por lo que he decidido crear un primero input para la primera pista, y luego, un botón que añada un nuevo input para cada pista que se desee poner.

Los campos imput tienen una id="track1", "track2", "trackn".

El código del formulario:
Código HTML:
Ver original
  1. <tr>
  2.  <td>Tracklist:</td>
  3.  <td id="tracklist">
  4.   <input type="text" name="track1" id="track1"><br>
  5.  </td>
  6. </tr>
  7. <input type="button" onClick="newTrack();" value="Añade otra canción"><br>

La función que añade campos input:
Código Javascript:
Ver original
  1. var control=1;
  2. function newTrack()
  3. {
  4.  var nums=(2,3,4,5,6,7,8,9);
  5.  var objeto=document.getElementById('tracklist');
  6.  objeto.innerHTML+='<input type="text" name="track"'+nums[control]+'"><br>'+"\n";
  7.  control++;
  8. }

La función que los comprueba:
Código Javascript:
Ver original
  1. if(document.getElementById('tracklist').value=='')
  2. {
  3.  alert('Jo, tio, ponme al menos una canción en el disco');
  4.  return false;
  5. }
  6. else
  7. {
  8.  var obj = document.getElementById('tracklist').childNodes;
  9.  var u;
  10.  //El alert comentado lo puse para comprobar si podía acceder a los childNodes.
  11.  //Solo puedo acceder al primero del array, incluso después de haber creado más
  12.  //alert(document.getElementById('tracklist').childNodes[0].name);
  13.  for(u==1;u < obj;u++)
  14.  {
  15.   //Este alert es para comprobar que se puede acceder a los childNodes
  16.   //La finalidad de la función es comprobar con un IF si su valor es una cadena vacía.
  17.   alert(document.getElementById('tracklist').childNodes[u].name);
  18.  }
  19. }

El problema: Solo puedo acceder al primer nodo, aun habiendo creado más con la función newTrack(); .

¿No puedo acceder a ellos porque no están creados en el momento de cargar la página, o es un error en alguna función? Y, en el caso de sí poder acceder a ellos, ¿cómo puedo hacerlo?

Muchas gracias.
  #2 (permalink)  
Antiguo 02/09/2010, 08:25
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Comprobar un número indefinido de campos

Hola

Mírate esto

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 02/09/2010, 17:43
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Comprobar un número indefinido de campos

Hola, Adler, gracias por contestar:

Ya vi aquel post, antes de postear esto. En el código ese, haces más o menos lo que yo tengo. Mi problema es más bien que al pinchar en el botón de añadir nuevos inputs, me aparecen bien en la página, pero no puedo acceder a ellos, me salta Undefined.

Por otra parte, me he fijado que en mi código hay un pequeño fallo, en lo que aquí es la línea 13 del archivo de comprobación:

for(u==1;u < obj;u++)

La he cambiado, dejándola así:

Código Javascript:
Ver original
  1. for(u=1;u < obj.length;u++)//pongo length para comprobar el número de valores del array

Igualmente, sigue ocurriendo que por cada valor del array, aparecen tres alerts: uno en el que pone "track", cuando debería poner "trackn" (donde n es un número), y luego otros dos en los que pone "undefined".

He decidido hacer otra cosa: comienzo con cero inputs, y un botón en el que se pregunta el número de pistas, para crear ese número de inputs, solo que ahora hay un bucle FOR que nunca llega a ejecutarse:

Código Javascript:
Ver original
  1. var tracks=parseInt(prompt('¿Cuántas pistas tiene el disco?'));
  2. if(!parseInt(tracks))
  3. {
  4.  alert('En números, por favor');
  5.  newTrack();
  6. }
  7. else if(parseInt(tracks)&&tracks > 30)
  8. {
  9.  alert('30 es un buen número para las canciones. Si el disco tiene más, pon las 30 primeras');
  10.  newTrack();
  11. }
  12. else
  13. {
  14.  alert('al menos llega hasta aquí');
  15.  for(var w=1;w == tracks; w++)
  16.  {
  17.   alert('Este alert No aparece en ningún momento, y tampoco se crea abajo el input');
  18.   document.getElementById('tracklist').innerHTML='<input type="text" name="track'+w+"\"><br>\n";
  19.  }
  20.  alert('Este alert sí aparece');
  21. }

Simplemente, el bucle no existe en el código... .

¿Alguna idea de cómo hacer lo que pretendo, pero que funcione?

Muchas gracias!
  #4 (permalink)  
Antiguo 03/09/2010, 06:54
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Comprobar un número indefinido de campos

Hola
Cita:
Iniciado por Alun Ver Mensaje
¿Alguna idea de cómo hacer lo que pretendo, pero que funcione?
Aún no me he cruzado con nadie que responda con el objetivo de confundir. Unas veces puedes estar mas acertado y otras menos, pero la pretensión es siempre, y repito, siempre, ofrecer la ayuda mas satisfactoria posible

Prueba con esto
Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <script type="text/javascript">
  6. function crearCampos(cantidad){
  7. var div = document.getElementById("campos_dinamicos");
  8. while(div.firstChild)div.removeChild(div.firstChild); // remover elementos;
  9.     for(var i = 1, cantidad = Number(cantidad); i <= cantidad; i++){
  10.     var salto = document.createElement("P");
  11.     var input = document.createElement("input");
  12.     var text = document.createTextNode("Campo Dinamico " + i + ": ");
  13.     input.setAttribute("name", "campo[]");
  14.     input.setAttribute("id", "campo" + i);
  15.     input.setAttribute("size", "12");
  16.     input.className = "input";
  17.     salto.appendChild(text);
  18.     salto.appendChild(input);
  19.     div.appendChild(salto);
  20.     }
  21. }
  22. </script>
  23.  
  24. </head>
  25. <body>
  26. <form>
  27. ¿Cuantos Campos? <input type="text" name="cantidad" id="cantidad" value="" onkeyup="crearCampos(this.value);" />
  28. <input type="button" id="boton" value="Crear/Eliminar Campos" onclick="crearCampos(this.form.cantidad.value);" />
  29. <div id="campos_dinamicos"></div>
  30. </form>
  31. </body>
  32. </html>
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 03/09/2010, 16:06
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Comprobar un número indefinido de campos

Hola

Ahora lo he entendido. Pensaba que pedías un script con que crear los campos. Ni tan si quiera miré el código. El problema lo tienes aquí
Cita:
for(var w=1;w == tracks; w++)
debería de ser
Cita:
for(var w=1;w <= parseInt(tracks); w++)
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 04/09/2010, 04:46
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Comprobar un número indefinido de campos

Hola de nuevo:

¿Hay que convertir a numérica la variable en la condición? Ya me encargué arriba de que fuera un numérico el que entra. Igualmente, voy a probar a ver si me va, muchas gracias.
  #7 (permalink)  
Antiguo 04/09/2010, 05:12
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Comprobar un número indefinido de campos

Hola

Estoy gafado con este código
Si que hace falta, pero no como lo haces tu, ni como yo te lo indiqué
Código Javascript:
Ver original
  1. var valor=prompt('¿Cuántas pistas tiene el disco?');
  2. // Intentas convertilo un entero
  3. tracks= parseInt(valor)
  4. )
  5. //Compruebo si es un valor numérico
  6. if (isNaN(tracks)) {
  7.  alert('En números, por favor');
  8.  newTrack();
  9. }
  10. else if(tracks && tracks > 30)
  11. {
  12.  alert('30 es un buen número para las canciones. Si el disco tiene más, pon las 30 primeras');
  13.  newTrack();
  14. }
  15. else
  16. {
  17.  alert('al menos llega hasta aquí');
  18.  for(var w=1;w <= tracks; w++)
  19.  {
  20.   alert('Este alert No aparece en ningún momento, y tampoco se crea abajo el input');
  21.   document.getElementById('tracklist').innerHTML='<input type="text" name="track'+w+"\"><br>\n";
  22.  }
  23.  alert('Este alert sí aparece');
  24. }
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Etiquetas: campos, comprobar
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 12:49.