Foros del Web » Programando para Internet » Javascript »

Duda simple sobre variables

Estas en el tema de Duda simple sobre variables en el foro de Javascript en Foros del Web. Hola. Sonará a pregunta boba, pero cómo podría crear variables distintas en un bucle FOR. Por ejemplo: for (x=0;x<10;x++){ var variable+x = $('boton'+x); } Gracias ...
  #1 (permalink)  
Antiguo 18/11/2008, 04:17
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Duda simple sobre variables

Hola. Sonará a pregunta boba, pero cómo podría crear variables distintas en un bucle FOR. Por ejemplo:

for (x=0;x<10;x++){
var variable+x = $('boton'+x);
}

Gracias :)
  #2 (permalink)  
Antiguo 18/11/2008, 04:27
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 9 meses
Puntos: 772
Respuesta: Duda simple sobre variables

Hola Luisfa. Bienvenido al foro.

Esto lo aprendía del maestro caricatos (¡Hola! )

Código javascript:
Ver original
  1. for (x=0;x<10;x++){
  2.   window['variable'+x] = $('boton'+x);
  3. }

Saludos,
  #3 (permalink)  
Antiguo 18/11/2008, 04:49
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda simple sobre variables

La respuesta ya la tienes, pero permiteme sugerir una alternativa. ¿Has pensado en utilizar un array?
Código javascript:
Ver original
  1. var variable = new Array();
  2. for (x=0;x<10;x++){
  3.     variable[x] = $('boton'+x);
  4.     // o mejor aún variable.push($("boton"+x));
  5. }
  #4 (permalink)  
Antiguo 18/11/2008, 05:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda simple sobre variables

Gracias Javier, de momento me ha servido, pero he encontrado un nuevo problema. ¿Cambia este modo dentro de una función para llamar a las de fuera?

Estoy tratando de pasar este código:

Código:
button1.addEvent('click', function(){
  if(content1.getStyle('height').toInt() > 0){
        Toggle1.start(0);
  }else{
        Toggle1.start(c1Height);
  }
  button1.toggleClass('button1_');
  return false;
});

...en este bucle FOR:

Código:
for (x=0;x<10;x++){
     window ['button'+x].addEvent('click', function(){
	 if(window ['content' +x].getStyle('height').toInt() > 0){
		 window ['Toggle'+x].start(0);
	}else{
	         window ['Toggle'+x].start(window ['cHeight'+x]);
	}
      window ['button' + x].toggleClass('button'+x+'_');
      return false;
}
Pero me falla en la sentencia de los IF

Código:
if(window ['content' +x].getStyle('height').toInt() > 0)

¿? Ayuda plis

Última edición por Luisfa; 18/11/2008 a las 05:15
  #5 (permalink)  
Antiguo 18/11/2008, 06:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda simple sobre variables

He usado arrays como dices Veckman, pero el problema sigue ahí. Creo que ahora podré exponerlo de una forma más limpia y clara:

Código:
var button = new Array();
var content = new Array();
var Toggle = new Array();
  	for (x=1;x<lis.length+1;x++){
  		button[x] = $('button'+x);
		content[x] = $('contentElement'+x);
		Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
  	}

button[1].addEvent('click', function(){
  if(content[1].getStyle('height').toInt() > 0){
 	 Toggle[1].start(0);
  }else{
     Toggle[1].start(c1Height);
  }
  return false;
});
Esto así tal cual funciona bien. Pero metido el addEvent dentro del FOR deja de funcionar:

Código:
for (x=1;x<lis.length+1;x++){
  	button[x] = $('button'+x);
	content[x] = $('contentElement'+x);
	Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});

        button[x].addEvent('click', function(){
              if(content[x].getStyle('height').toInt() > 0){
 	            Toggle[x].start(0);
              }else{
                    Toggle[x].start(c1Height);
              }
           return false;
       });
}
¿Cual es la diferencia?
  #6 (permalink)  
Antiguo 18/11/2008, 06:22
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda simple sobre variables

Ver el código en el mensaje de más abajo.

Última edición por venkman; 18/11/2008 a las 08:45
  #7 (permalink)  
Antiguo 18/11/2008, 06:44
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda simple sobre variables

Gracias de nuevo :)

Me parece que hay algo que estoy haciendo mal, pero de planteamiento.
Con este código:

Código:
   
         for (x=0;x<10;x++){
  		button[x] = $('button'+x);
		content[x] = $('contentElement'+x);
		Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
		
		button[x].addEvent('click', function(){
		var a = x;
		  if(content[a].getStyle('height').toInt() > 0){
			Toggle[a].start(0);//hide
		  }else{
			Toggle[a].start(height[a]);//show
		  }
		  return false;
		});
		
		content[x].setStyle('display','block');
		height[x] = content[x].getSize().scrollSize.y;
  	}
al hacer un Alert (a) me dice "10", pulsando cualquiera de los botones.
Yo lo que quería era asignarle a cada boton su función independiente, para actuar en sus respectivas capas, pero al meterla en el FOR supongo que estaré haciéndolo mal, no?

¿Tendría que sacarla de ahí? ¿Como le doy acada boton su funcion propia usando un bucle? (el numero de botones no es fijo, depende del numero de noticias, por eso necesito que sea dinamico y automatico)
  #8 (permalink)  
Antiguo 18/11/2008, 08:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda simple sobre variables

Reduje el código y queda así:

Código:
for (x=0;x<10;x++){
  	button[x] = $('button'+x);
	content[x] = $('contentElement'+x);
	Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
}

button[1].addEvent('click', function(){
  if(content[1].getStyle('height').toInt() > 0){
 	 Toggle[1].start(0);
  }else{
     Toggle[1].start(content[1].getSize().scrollSize.y);
  }
  return false;
});

Es más, así también funciona:
Código:
  for (x=1;x<lis.length+1;x++){
  		button[x] = $('button'+x);
		content[x] = $('contentElement'+x);
		Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
  }

for(i=1;i<button.length;i++){
    if(content[i].getStyle('height').toInt() > 0){
         Toggle[i].start(0);
    }else{
         Toggle[i].start(content[i].getSize().scrollSize.y);
    }
}
Lo único que queda es aplicar esa función addEvent del botón a todos los botones del array Button. ¿Cómo podría hacer eso?

Gracias de antemano

Última edición por Luisfa; 18/11/2008 a las 08:37
  #9 (permalink)  
Antiguo 18/11/2008, 08:44
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda simple sobre variables

WOa, perdona. Debía de estar dormido. Ignora lo de arriba. Una solución es esto:

Código javascript:
Ver original
  1. for (x=1;x<lis.length+1;x++){
  2.           button[x] = $('button'+x);
  3.           content[x] = $('contentElement'+x);
  4.           Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
  5.        
  6.           button[x].addEvent('click', (function(a){
  7.               return function() {
  8.                   if(content[a].getStyle('height').toInt() > 0){
  9.                       Toggle[a].start(0);
  10.                   }else{
  11.                       Toggle[a].start(c1Height);
  12.                   }
  13.                   return false;
  14.               }
  15.           })(x));
  16.       }


Si lo prefieres, para que quede más fácil de entender. La solución puede quedar:

Código javascript:
Ver original
  1. function creaGestorEvento(a){
  2.     return function() {
  3.         if(content[a].getStyle('height').toInt() > 0){
  4.             Toggle[a].start(0);
  5.         }else{
  6.             Toggle[a].start(c1Height);
  7.         }
  8.         return false;
  9.     }
  10. }
  11. for (x=1;x<lis.length+1;x++){
  12.     button[x] = $('button'+x);
  13.     content[x] = $('contentElement'+x);
  14.     Toggle[x] = new Fx.Style('contentElement'+x, 'height',{duration: 500});
  15.     button[x].addEvent('click', creaGestorEvento(x));
  16. }
  #10 (permalink)  
Antiguo 18/11/2008, 09:00
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda simple sobre variables

1000 veces 1000 gracias Veckmar :D
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:33.