Foros del Web » Programando para Internet » Javascript »

problema con js dentro de un while en php

Estas en el tema de problema con js dentro de un while en php en el foro de Javascript en Foros del Web. hola a todos. Estoy teniendo un problema con un codigo en javascript. No escribo todo el codigo ya que es un poco largo (pero muy ...
  #1 (permalink)  
Antiguo 18/02/2011, 13:06
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
problema con js dentro de un while en php

hola a todos. Estoy teniendo un problema con un codigo en javascript.

No escribo todo el codigo ya que es un poco largo (pero muy simple) y tp creo q sea esencial. Os comento:
Se trata de que quiero mostrar varias cuentas atras (independientes).

Empiezo con php creando una serie de variables (arrays) dentro de un while. Me las llevo a javascript, creo las cuentas atras y las muestro en divs (con imagenes via css).

El problema es el siguiente: si se trata de una sola cuenta atras, todo funciona perfecto, pero cuando he probado con 2, ocurre que el primer conjunto de divs ni se inmuta, ocurriendo la cuenta atras en el 2º conjunto de divs de 2 en 2 segundos.

No entiendo pq leches hace eso, la verdad, pq hago claramente (eso creo yo) la distincion de divs mediante la variable i, pero ..... eso no sucede...

Alguien me puede decir donde tengo el fallo???


Código PHP:
Ver original
  1. <?php
  2. ...
  3. $i=0;
  4. while($tiempos = mysql_fetch_array($consulta))
  5.     {
  6.     $horas[$i][1]=...;
  7.     $horas[$i][0]=...;
  8.     //blablabla...exactamente lo mismo para minutos y segundos....
  9.     ?>
  10.  
  11. <script type="text/javascript">
  12. var decHora = "<?php echo $horas[$i][0] ?>",
  13. uniHora = "<?php echo $horas[$i][1] ?>";
  14.     //blablabla...exactamente lo mismo para minutos y segundos....
  15. var i = "<?php echo $i ?>";
  16.    
  17. cuentaAtras = function(decHora,uniHora,decMin,uniMin,decSeg,uniSeg) {
  18.     $("#dechora"+i).removeClass().addClass("numero"+decHora);
  19.     $("#unihora"+i).removeClass().addClass("numero"+uniHora);
  20.     //blablabla...exactamente lo mismo para minutos y segundos....
  21.     $("#dospuntos1, #dospuntos2").addClass("dospuntos");
  22. }
  23.  
  24. var intervalo = setInterval(function(){
  25.     uniSeg--;
  26.     blablabla....codigo para crear esa cuenta atras....
  27.  
  28. cuentaAtras(decHora,uniHora,decMin,uniMin,decSeg,uniSeg);
  29. },1000);
  30. </script>
  31. <div id="cuentaatras<?php echo $i ?>">
  32.     <div class="tiempos" id="dechora<?php echo $i ?>"></div>
  33.     <div class="tiempos" id="unihora<?php echo $i ?>"></div>
  34.     <div class="tiempos" id="dospuntos1"></div>
  35.     //blablabla...exactamente lo mismo para minutos y segundos....
  36. </div>
  37.     <?php
  38.     $i++;
  39.     }
  40. ?>

Lo he puesto en texto tipo .php pq al fin y al cabo es un php. Disculpad que sea un poco dificil de "leer".
1 saludo a todos y muchas gracias.

Última edición por oms02; 18/02/2011 a las 14:45
  #2 (permalink)  
Antiguo 18/02/2011, 15:06
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: problema con js dentro de un while en php

Lo que pasa es q estas definiendo variables y funciones con el mismo nombre con cada iteración cambialos por ejemplo aprovechando la variable $i:

var decHora<?php echo $i;?> = "<?php echo $horas[$i][0] ?>";
cuentaAtras<?php echo $i;?> = function(...

y en donde no se necesite repetir variables ni funciones.

Saludos!
  #3 (permalink)  
Antiguo 18/02/2011, 17:47
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: problema con js dentro de un while en php

Hola Omar. Gracias por responder.

Pues lo cierto es que con tu consejo la cosa ha mejorado pero sin llegar a arreglarse completamente.

Ahora el contador si que baja de 1 segundo en 1 segundo pero el primer grupo de divs (1ª cuenta atras) sigue sin inmutarse.

Me imagino por donde van los tiros pero es que no se como arreglarlo. Creo que el problema esta en que cuando se ejecuta de nuevo el codigo js, los valores de las variables nuevas reemplazan a los valores de las antiguas, pero no se como solucionarlo..

1 saludo a todos y gracias de nuevo.
  #4 (permalink)  
Antiguo 18/02/2011, 19:11
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: problema con js dentro de un while en php

No se si voy hacia atras como los cangrejos, pero he decidido separar los codigos para hacerlo un poquito mas legible.

Estos dos primeros fragmentos de codigo van totalmente seguidos, en el mismo archivo.

Lo unico que he cambiado es que dentro del contenedor he metido un div en el que escribo los tiempos (en realidad nºs separados por ":") por separado de ambas cuentas-atras. A continuacion, en el fichero reloj.js (ahora externo), recojo los valores y hago lo mismo.

Código PHP:
Ver original
  1. <?php
  2. ...
  3. $i=0;
  4. while($tiempos = mysql_fetch_array($consulta))
  5.     {
  6.     $horas[$i][1]=...;
  7.     $horas[$i][0]=...;
  8.     ?>

Código HTML:
Ver original
  1. <div class="contenedortiempos">
  2.     <div id="numeros-cuentaatras<?php echo $i ?>"><?php echo $horas[$i][0].":".$horas[$i][1] ?></div>
  3.     <script type="text/javascript">reloj(<?php echo $i ?>)</script>
  4.     <div class="tiempos" id="dechora<?php echo $i ?>"></div>
  5.     <div class="tiempos" id="unihora<?php echo $i ?>"></div>
  6.     <div class="tiempos" id="dospuntos1"></div>
  7. </div>
  8.     <?php
  9.     $i++;
  10.     }
  11. ?>

y ahora el fichero js
Código Javascript:
Ver original
  1. function reloj(i)
  2. {
  3. var digitos = $("#numeros-cuentaatras"+i).text();
  4. var digito = digitos.split(':');
  5. var decHora = digito[0],
  6.     uniHora = digito[1];
  7.    
  8. cuentaAtras = function(decHora,uniHora,decMin,uniMin,decSeg,uniSeg) {
  9.     $("#dechora"+i).removeClass().addClass("numero"+decHora);
  10.     $("#unihora"+i).removeClass().addClass("numero"+uniHora);
  11.     $("#dospuntos1, #dospuntos2").addClass("dospuntos");
  12. }
  13.  
  14. var intervalo = setInterval(function(){
  15.     ...
  16.     ...el codigo que hace la cuenta atras...
  17.     ...
  18. cuentaAtras(decHora,uniHora,decMin,uniMin,decSeg,uniSeg);
  19. },1000);
  20.  
  21. }

El resultado es el mismo. Ahora la cuenta atras si que la hace correctamente (de segundo en segundo) pero de nuevo, el 1er conjunto de divs completamente parado.

"Estaba convencido" de que asi funcionaria (a mi modo ver hago que ambos sean totalmente independientes, llamando a la misma funcion pero haciendo referencia a lugares del DOM diferentes), pero....mi gozo en un pozo.

Alguna idea porfavor??

Un saludo a todos y gracias de nuevo por el interes.
  #5 (permalink)  
Antiguo 18/02/2011, 19:16
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: problema con js dentro de un while en php

ARREGLADO.

cuentaAtras = function(decHora,uniHora,...,i)

Gracias de todas formas por el interes mostrado. 1 saludo a todos!

Etiquetas: js, php
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 22:04.