Foros del Web » Programando para Internet » Javascript »

No se me ejecutan los bucles FOR

Estas en el tema de No se me ejecutan los bucles FOR en el foro de Javascript en Foros del Web. Saludos: Pues eso, he posteado otra pregunta ( http://www.forosdelweb.com/f13/compr...campos-838694/ ) donde tengo un bucle FOR que nunca llega a ejecutarse. Ahora estoy haciendo una comprobación ...
  #1 (permalink)  
Antiguo 02/09/2010, 21:15
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
No se me ejecutan los bucles FOR

Saludos:

Pues eso, he posteado otra pregunta (http://www.forosdelweb.com/f13/compr...campos-838694/) donde tengo un bucle FOR que nunca llega a ejecutarse.

Ahora estoy haciendo una comprobación de unos radio, y para ello, he puesto este bucle:

Código Javascript:
Ver original
  1. var radioOk=false;
  2. //este alert se ejecuta bien
  3. alert('entrando')
  4. for(i=0;i==1;i++)
  5. {
  6.  //este alert nunca llega a ejecutarse
  7.  alert('dentro');
  8.  if(document.registro.sexo[i].checked)
  9.  {
  10.   radioOk=true;
  11.   continue;
  12.   return false
  13.  }
  14. }
  15. //este alert se ejecuta bien
  16. alert('saliendo');

¿Qué puede dar lugar a este error? ¿Algo relacionado con la configuración?

Agradecería cualquier ayuda, tengo que entregar un proyecto en poco tiempo y ando con él pegado al culo...

Muchas gracias
  #2 (permalink)  
Antiguo 02/09/2010, 21:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: No se me ejecutan los bucles FOR

concentrate en lo resaltado.
Código:
for(i=0;i==1;i++){
...
}
advertencia: si este tema esta relacionado con el otro, no debistes haber creado otro tema. aparte de que te pueden amonestar, dificultas la ayuda que se te pueda ofrecer.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 03/09/2010, 01:00
 
Fecha de Ingreso: mayo-2010
Mensajes: 60
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: No se me ejecutan los bucles FOR

Si el alert no sale está claro que el problema es que l = 0, segurísimo vamos.

Si no entiendes por qué esa variable tiene ese valor ese momento lo mejor es que depures el código debugándolo y eso es muy fácil en firefox con la extensión Firebug. Sino lo conoces míratelo e instalaló porque te quitará muchos dolores de cabeza.

Saludos
  #4 (permalink)  
Antiguo 03/09/2010, 06:50
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: No se me ejecutan los bucles FOR

Gracias por las respuestas:

Primero que nada, disculparme por el doble post, supuse que, al ser códigos distintos, debía abrir otro hilo. Si procede, puedo copiar el código del otro hilo en este, y eliminarlo. Espero respuesta antes de hacer nada, no quiero cabrear a los moderadores.

Por lo que al código respecta:

Washby: Conozco la extensión, pero no me ha servido de mucho con este error. La variable comienza con el valor 0 porque tengo dos radio buttons en un formulario, y la finalidad del bucle es recorrerlos: if(document.registro.sexo[i].checked).

Zerokilled: He revisado el fragmento de código que me indicas, pero sigo sin ver errores (aunque es evidente que debe de haberlos), la lógica es la siguiente: comenzando con un valor cero, y hasta que el valor sea uno, compruébame los radio[valor]. Si te refieres a un error de sintaxis, puede haber fallo, pero ya te digo que tampoco lo encuentro.

No busco que me pongais el código arreglado, sino más bien que me expliqueis el por qué de que falle en ambos códigos, así, no me volverá a pasar más adelante.

Muchas gracias por las respuestas.
  #5 (permalink)  
Antiguo 03/09/2010, 11:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: No se me ejecutan los bucles FOR

Cita:
[...] y hasta que el valor sea uno, [...]
justo ahi es donde tienes problema. fijate que la estructura de un ciclo for es la siguiente:
Código:
for(inicializacion; condicion; iterador){
cuerpo;
}
el bucle continua, incluso para el primer ciclo, cuando la expresion en la condicion evalua al boolean true. en cualquier momento que evalue a falso, se detiene. en el primer ciclo tu expresion dice i=0; i==1;. ¿a que evalua la segunda expresion?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 03/09/2010, 15:54
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: No se me ejecutan los bucles FOR

Cita:
Iniciado por zerokilled Ver Mensaje
¿a que evalua la segunda expresion?
Evalua a un valor 1, aunque no se si eso es válido. He cambiado esa expresión, ahora tengo esto:

for(var i=0;i < document.forms[0].sexo.length;i++)

Solucionado, ahora funciona bien. Ese era el fallo, no puedo poner un número sin más, sino que tiene que ser un valor que provenga de algún sitio (variable, número de campos de un formulario....). ¿Me equivoco en eso? Y, si es como he dicho, ¿por qué es así? Me interesa mucho más esta respuesta que todas las anteriores, así aprendo algo nuevo.

Muchas gracias a los dos.
  #7 (permalink)  
Antiguo 03/09/2010, 16:28
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: No se me ejecutan los bucles FOR

en realidad la sintaxis no genera error, es perfectamente valido poner directamente un numero pero para tu caso particular no es lo adecuado porque se entiende que tienes un numero variable de campos. el problema no era realmente el numero en si, sino lo que evaluaba la expresion.
Código:
i=0;
// variable i contiene el valor 0;

i==1;
// se compara si variable i -que contiene valor 0- es igual a 1;
// esta expresion devuelve un boolean false, el cual detiene el ciclo for;
como podras ver, en tu segundo codigo, la condicion ahora es totalmente distinta. lo que dice es mientras i sea menor que la cantidad de elementos. por tanto, si por ejemplo tienes 5 elementos, en el primer ciclo 0 es menor que 5 el cual evalua a un boolean true. como resultado, el interprete entra al cuerpo del ciclo. continua asi hasta que i ya no sea menor que la cantidad de elementos.

en teoria, como antes decia, la segunda expresion puede ser cualquier cosa que evalue a un boolean donde true permite al interprete entrar al ciclo y false no entra el ciclo. el siguiente ejemplo sera esoterico para ti, pero fijate que las expresiones no tienen porque ser a base de numeros. mas adelante, cuando estes mas profundizado en el tema de DOM, vuelve analizar el siguiente codigo.
Código:
// asumiendo que element es la referencia a un elemento HTML o XML;
for(var last = element.lastChild; last.previousSibling; element.appendChild(last.previousSibling));
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 03/09/2010 a las 16:33
  #8 (permalink)  
Antiguo 03/09/2010, 17:10
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: No se me ejecutan los bucles FOR

Creo que ahora he pillado bien el concepto de la explicación: la idea es asegurarse de que el bucle analiza exactamente el número de objetos que hay, no más ni menos, de ahí que haya que pasarle la referencia del número de objetos en lugar del número de objetos que se cree que hay. ¿Es así?

A decir verdad, el código que posteé en este hilo era para analizar unos radio buttons, en los que se preguntaba el sexo (solamente dos, hombre o mujer), por eso puse i==1 (....sexo[0] y ....sexo[1]). En cualquier caso, con la referencia del número de objetos funcina mejor que con el número de objetos directamente.

Ahora, aplicando tu explicación tal y como la he entendido, he pasado al bucle en el que se crea un número N de campos, de esta manera:

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 //A partir de aquí es donde aparecen los errores
  13. {
  14.  alert('este alert salta');
  15.  for(var w=1;w == tracks; w++)
  16.  {
  17.   alert('este alert NO salta, y tampoco se ejecuta la orden de abajo');
  18.   document.getElementById('tracklist').innerHTML='<input type="text" name="track'+w+"\"><br>\n";
  19.  }
  20. alert('Este alert salta');
  21. }

La lógica: dado un número N, facilitado por el usuario, crea campos input, comenzando con w=0, y hasta que w==N.

En este caso, lo mismo, el bucle no se ejecuta. Creo que esta vez si es apropiado dar un valor numérico como condición, ¿no? Así, está (o debería estar) creando campos hasta que el usuario decida que pare.
  #9 (permalink)  
Antiguo 03/09/2010, 17:18
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: No se me ejecutan los bucles FOR

Bien, creo que me he adelantado demasiado al postear el último. Me he fijado bien, y he vuelto a fallar en lo mismo: for(var w=1;w == tracks; w++);

Además, en cada reiteración, creo el mismo input, de manera que siempre queda uno.

Lo he solucionado con "for(var w=1;w <= tracks; w++);" y agregando el código a crear a una variable cada vez que se reitera. Por último, accedo al <div> y ejecuto un innerHTML.

Muchas gracias por la ayuda, ahora solo queda que me fije un poco más en lo que escribo!
  #10 (permalink)  
Antiguo 04/09/2010, 04:46
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: No se me ejecutan los bucles FOR

Hola

No dupliques temas, por que te lo podrán cerrar

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: bucles
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 11:14.