Comunidad de diseño web y desarrollo en internet online

Asignación de eventos mediante un bucle

Citar            
MensajeEscrito el 26 May 2008 08:05 pm
Que tal, tengo el siguiente problema: estoy realizando una pagina en la cual se cargan una serie de noticias extraidas de una base de datos mediante php. Se visualizan en forma de lista y cuando la persona clickea en alguna, se despliega el cuerpo de la noticia. El problema es que cuando creo el evento onPress de la siguiente forma:

Código :

         mainContenedor.clip_texto[\"unidad_noticias\"+contador].onPress = function() {

            _parent.contenedor.loadMovie(\"noticia_seleccionada.swf\");
            _parent.encabezado.gotoAndStop(2);
            _global.noticia = result_lv[\"ides\"+contador];
         };

la variable contador queda siempre en 0. Cabe destacar que el codigo anterior se encuentra dentro de un bucle while que va asignando el evento onPress a cada uno de los titulares entre otras cosas.
He probado con diferentes cosas y hasta ahora nada, como si primero se asignasen los eventos y despues se recorriese el bucle.

A alguien se le ocurre algo?

Por topicus

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2008 10:14 pm
Si pones un contador en un bucle while, debes cambiar el valor manualmente, porque el contador no lo hará de forma automática. Si quieres que lo haga de forma automática, cambia el while por for.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 27 May 2008 03:33 am
Disculpen por no aclarar, pero estaba contemplado el incremento de la variable, creo que el problema es una cuestion de ambitos que todavia no se como resolver.

Código :

var i:Number = 0;
var mainContenedor = this;
result_lv.onLoad = function(success:Boolean) {

   if (success) {

      while (this[\"titulo\"+contador]) {
         ref = this;
         mainContenedor.clip_texto.attachMovie(\"unidad_noticias\",\"unidad_noticias\"+contador,mainContenedor.clip_texto.getNextHighestDepth());
         mainContenedor.clip_texto[\"unidad_noticias\"+contador].titulo.text = this[\"titulo\"+contador];
         mainContenedor.clip_texto[\"unidad_noticias\"+contador].sumario.text = this[\"sumario\"+contador];
         mesString = this[\"mes\"+contador];
         anoString = this[\"ano\"+contador];
         fechaCompleta = mesString+\" \"+anoString;
         mainContenedor.clip_texto[\"unidad_noticias\"+contador].fecha.text = fechaCompleta;
         if (contador != 0) {
            mainContenedor.clip_texto[\"unidad_noticias\"+contador]._y = mainContenedor.clip_texto[\"unidad_noticias\"+(contador-1)]._y+mainContenedor.clip_texto[\"unidad_noticias\"+(contador-1)].titulo.textHeight+20;
         } else {
            mainContenedor.clip_texto[\"unidad_noticias\"+contador]._y = 0;
         }
         mainContenedor.clip_texto[\"unidad_noticias\"+contador].imagen.loadMovie(\"imagenes_contenido/redimensionar.php?imagen=\"+this[\"imagen\"+contador]);
         mainContenedor.clip_texto[\"unidad_noticias\"+contador].onPress = function() {
            _global.noticia = ref[\"ides\"+contador]; ///ACA ESTA EL PROBLEMA

         };
         contador++;
      }
}


Muchas gracias por el aporte igualmente.

Saludos,

Topicus

Por topicus

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 05:01 pm
Hola Topicus, el problema está en que con ese código le estás utilizando el último id del bucle para todos los botones. La solución está en asignar un índice independiente a cada botón, para cada paso del bucle, que se corresponda con el contador en ese momento.

No se si me expliqué bien, básicamente sería lo siguiente (tu código ya modificado):

Código :

var i:Number = 0;
var mainContenedor = this;
result_lv.onLoad = function(success:Boolean) {

   if (success) {

      while (this[\\\\\\\"titulo\\\\\\\"+contador]) {
         ref = this;
         mainContenedor.clip_texto.attachMovie(\\\\\\\"unidad_noticias\\\\\\\",\\\\\\\"unidad_noticias\\\\\\\"+contador,mainContenedor.clip_texto.getNextHighestDepth());
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].titulo.text = this[\\\\\\\"titulo\\\\\\\"+contador];
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].sumario.text = this[\\\\\\\"sumario\\\\\\\"+contador];
         mesString = this[\\\\\\\"mes\\\\\\\"+contador];
         anoString = this[\\\\\\\"ano\\\\\\\"+contador];
         fechaCompleta = mesString+\\\\\\\" \\\\\\\"+anoString;
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].fecha.text = fechaCompleta;
         if (contador != 0) {
            mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador]._y = mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+(contador-1)]._y+mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+(contador-1)].titulo.textHeight+20;
         } else {
            mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador]._y = 0;
         }
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].imagen.loadMovie(\\\\\\\"imagenes_contenido/redimensionar.php?imagen=\\\\\\\"+this[\\\\\\\"imagen\\\\\\\"+contador]);
        
        //Asignamos el contador independiente a cada botón
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].contPropio = contador;
         mainContenedor.clip_texto[\\\\\\\"unidad_noticias\\\\\\\"+contador].onPress = function() {
                _global.noticia = ref[\\\\\\\"ides\\\\\\\"+this.contPropio]; //Indicamos el indice del array corresondiente
        };
         contador++;
      }
}

Creo que este era tu problema, espero haberte ayudado.

Saludos!

Por JuanGC

3 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.