Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/08/2011, 10:40
Profesor_Lambetain
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: setInterval que se ejecuta sólo 2 veces...

Cita:
Iniciado por laratik Ver Mensaje
Hola Profesor_Lambetain ¿Sobre que navegador te ejecuta solo dos veces? he probado tu script en IE9 y Chrome 13, al parecer funciona correctamente pues después de más de un minuto me sigue cambiando de imagen cada 5 segundos. Tambien puedes probar a utilizar recursividad con setTimeout, lo cual lograra un efecto parecido al utilizar setInterval:

Código Javascript:
Ver original
  1. <SCRIPT TYPE="text/javascript">
  2. // FUNCIÓN 2 DE REEMPLAZO DE IMÁGENES A MOSTRAR.
  3. function change() {
  4.     document.images[0].src=document.forms[0].elements[0].value+".jpg";
  5.     document.images[1].src=document.forms[0].elements[1].value+".jpg";
  6.     document.images[2].src=document.forms[0].elements[2].value+".jpg";
  7.     document.images[3].src=document.forms[0].elements[3].value+".jpg";
  8.     document.images[4].src=document.forms[0].elements[4].value+".jpg";
  9.     if(document.forms[0].elements[0].value==1) {
  10.         document.forms[0].elements[0].value=6;
  11.         document.forms[0].elements[1].value=7;
  12.         document.forms[0].elements[2].value=8;
  13.         document.forms[0].elements[3].value=9;
  14.         document.forms[0].elements[4].value=10;
  15.     } else if (document.forms[0].elements[0].value==6) {
  16.         document.forms[0].elements[0].value=11;
  17.         document.forms[0].elements[1].value=12;
  18.         document.forms[0].elements[2].value=13;
  19.         document.forms[0].elements[3].value=14;
  20.         document.forms[0].elements[4].value=15;
  21.     } else if (document.forms[0].elements[0].value==11) {
  22.         document.forms[0].elements[0].value=1;
  23.         document.forms[0].elements[1].value=2;
  24.         document.forms[0].elements[2].value=3;
  25.         document.forms[0].elements[3].value=4;
  26.         document.forms[0].elements[4].value=5;
  27.     }
  28.     setTimeout(change,5000);
  29. } // Fin function change().
  30. </SCRIPT>
  31.  
  32. <SCRIPT TYPE="text/javascript">
  33. // FUNCIÓN 1 DE REEMPLAZO DE IMÁGENES A MOSTRAR.
  34. function cambiarImagen() {
  35.     if(document.forms[0].elements[0].value==1) {
  36.         document.forms[0].elements[0].value=6;
  37.         document.forms[0].elements[1].value=7;
  38.         document.forms[0].elements[2].value=8;
  39.         document.forms[0].elements[3].value=9;
  40.         document.forms[0].elements[4].value=10;
  41.     } else if (document.forms[0].elements[0].value==6) {
  42.         document.forms[0].elements[0].value=11;
  43.         document.forms[0].elements[1].value=12;
  44.         document.forms[0].elements[2].value=13;
  45.         document.forms[0].elements[3].value=14;
  46.         document.forms[0].elements[4].value=15;
  47.     } else if (document.forms[0].elements[0].value==11) {
  48.         document.forms[0].elements[0].value=1;
  49.         document.forms[0].elements[1].value=2;
  50.         document.forms[0].elements[2].value=3;
  51.         document.forms[0].elements[3].value=4;
  52.         document.forms[0].elements[4].value=5;
  53.     }
  54.     change();
  55. } // Fin function cambiarImagen().
  56. </SCRIPT>



Pues no se si al momento de decir apaños te refieres a la utilización de inputs type hidden (lo cual me parece muy "chapuza"), pues sin recargar la pagina lo estas haciendo bien al utilizar javascript. Si es a eso a lo que te refieres claro que existe una forma más "elegante" de resolver tu problema:

Código Javascript:
Ver original
  1. <SCRIPT TYPE="text/javascript">
  2. function cambiarImagen(i) {
  3.     if(i==15) {
  4.         i = 0;
  5.     }
  6.     document.images.item(0).src = (i+1)+".jpg";
  7.     document.images.item(1).src = (i+2)+".jpg";
  8.     document.images.item(2).src = (i+3)+".jpg";
  9.     document.images.item(3).src = (i+4)+".jpg";
  10.     document.images.item(4).src = (i+5)+".jpg";
  11.     setTimeout(function(){cambiarImagen(i+5)},5000);
  12. }
  13. </SCRIPT>

llamada a la funcion:

Código HTML:
<body bgcolor="FFFFFF" onLoad="cambiarImagen(0);"> 
o si piensas trabajar con nombres de imágenes en vez de solo números:

Código Javascript:
Ver original
  1. <SCRIPT TYPE="text/javascript">
  2. function cambiarImagen(cont) {
  3.     if(cont==3) {
  4.         cont = 0;
  5.     }
  6.     var array;
  7.     if(cont == 0) {
  8.         array=["6.jpg","7.jpg","8.jpg","9.jpg","10.jpg"];//la segunda serie, solo cambia el nombre de los archivos a los de las imágenes
  9.     } else if(cont == 1) {
  10.         array=["11.jpg","12.jpg","13.jpg","14.jpg","15.jpg"];//la tercera serie
  11.     } else {
  12.         array=["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg"];//la primera serie
  13.     }
  14.     for(var i=0; i<array.length; i++) {
  15.         document.images.item(i).src = array[i];
  16.     }
  17.     setTimeout(function(){cambiarImagen(cont+1)},5000);
  18. }
  19. </SCRIPT>
Muchas gracias laratik. Tu respuesta me ha pillado fuera de mi sitio, ya la analizaré detenidamente, aunque me parace muy interesante.

Mi versión de IE es 6 ó 7. Pensaba que probablemente la interrupción de la ejecución del script sea debida a cierta limitación de mi mismo S.O. en la ejecución de scripts, y ahora que me dices que a tí te funciona en tu IE9 más me haces pensar en esa posibilidad (me refiero a la configuración del S.O. o IE respecto a ejecución de scripts). Pero eso se puede "evitar" engañando al S.O. haciendo una rutina menos elegante.

Con "apaño menos elegante" me refería a, por ejemplo, cargar una página auxiliar y, desde ésta, volver a cargar mi página nuevamente, lo que es un procedimiento que aumenta el tráfico y realmente me parece que debe de haber otra forma de lograr el cometido más "profesional".

Muchas gracias nuevamente.