Foros del Web » Programando para Internet » Javascript »

¿Porque me hace un bucle infinito?

Estas en el tema de ¿Porque me hace un bucle infinito? en el foro de Javascript en Foros del Web. Hola, Esoty dando vueltas a un código y no encuentro el fallo, hace un bucle infinito y no se porque: El código es el siguiente: ...
  #1 (permalink)  
Antiguo 06/11/2009, 06:05
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
¿Porque me hace un bucle infinito?

Hola,

Esoty dando vueltas a un código y no encuentro el fallo, hace un bucle infinito y no se porque:

El código es el siguiente:
Código:
	function accionBuscador(nombrecapa){
		var nombrecapa = "#" + nombrecapa;
		
		var niveles = nombrecapa.split("_");
		//Expandimos o contraemos los los divs
		$(niveles[0]).slideToggle("slow");	

		//Si es de segundo nivel o superior
		if(niveles.length>1){
			for(i=1;i<niveles.length;i++){
				alert("Nombre Capa: " + nombrecapa + "\nNivel: " + niveles + "\nNiveles: " + niveles.length + "\ni: " + i);
			}
		}
		
	}
Cuando le ejecuto la función: "accionBuscador("nivel1_1
")" me hace un bucle todo el rato igual:

Nombre Capa: #nivel1_1
Nivel: #nivel1,1
Niveles: 2
i: 1

¿A que se debe?

Gracias por vuestra ayuda
  #2 (permalink)  
Antiguo 06/11/2009, 07:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: ¿Porque me hace un bucle infinito?

Analicemos:

function accionBuscador(nombrecapa){<---nivel1_1
var nombrecapa = "#" + nombrecapa;<---#nivel1_1

Primer comentario, yo siempre evito sobrecargar los nombres, tienes un parametro y una variable con el mismo nombre.

var niveles = nombrecapa.split("_");

The split() method is used to split a string into an array of substrings, and returns the new array.
Luego en "niveles" tenemos un array con (#nivel1,1) y por tanto length=2


//Expandimos o contraemos los los divs <--- "los" o "el" div

$(niveles[0]).slideToggle("slow"); <---- $ is not defined...(sin jquery)

Aquí no se que decirte $().slideToggle("slow") és jquery no? en cualquier caso niveles[0]='#nivel1'

//Si es de segundo nivel o superior
if(niveles.length>1){ <-- true ya que length=2
for(i=1;i<niveles.length;i++){ <--- des de i=1; mientras i<2 !!!! Una sola vuelta
alert("Nombre Capa: " + nombrecapa + "\nNivel: " + niveles + "\nNiveles: " + niveles.length + "\ni: " + i);
<--- nombrecapa="#nivel1_1"
<----niveles és un array!!! = (#nivel1,1)
<----niveles.length=2
<----i=1

}
}

Resultado

Nombre Capa: #nivel1_1
Nivel: #nivel1,1
Niveles: 2
i: 1


Nada de bucle infinito. Nada raro. Totalmente previsible, no?

No entiendo que pretendes hacer por lo que no te puedo ayudar mas...

Quim

Última edición por quimfv; 06/11/2009 a las 07:47
  #3 (permalink)  
Antiguo 09/11/2009, 10:16
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: ¿Porque me hace un bucle infinito?

Hola

Que hace esta linea. var niveles = nombrecapa.split("_");

nombrecapa no lo encuentra porque no tiene como, debería ser algo asi document.getElementById(nombrecapa).split('_');
o con jquery $(nombrecapa).split('_');

y como dice quimfv cual es la función de este código?

Saludos
  #4 (permalink)  
Antiguo 09/11/2009, 10:24
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
Respuesta: ¿Porque me hace un bucle infinito?

lo he arreglado con el siguiente codigo:

Código:
function accionBuscador(nombrecapa){
		var i = 0;
		var niveles = nombrecapa.split("_");
	
		//Expandimos o contraemos los los divs
		if(capaEstaCerrada(niveles[0])) $("#" + niveles[0]).slideToggle("fast");	

		//Si es de segundo nivel o superior
		if(niveles.length>1){
			for(i=1;i<niveles.length;i++){
				if(i==1){
					if(capaEstaCerrada(niveles[0]+"_"+niveles[1])) $("#" + niveles[0]+"_"+niveles[1]).slideToggle("fast");
				}if(i==2){
					if(capaEstaCerrada(niveles[0]+"_"+niveles[1]+"_"+niveles[2])) $("#" + niveles[0]+"_"+niveles[1]+"_"+niveles[2]).slideToggle("fast");
				}
			}
		}
		
	}
Gracias a todos por vuestras respuestas.
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 18:47.