Foros del Web » Programando para Internet » Javascript »

No se me ejecuta el setInterval

Estas en el tema de No se me ejecuta el setInterval en el foro de Javascript en Foros del Web. Tengo un problema con el setInterval que no se ejecuta por que no encuentra style creo :S. Intenté con getElementsByName .. nada Quiero que tenga ...
  #1 (permalink)  
Antiguo 03/02/2011, 16:23
Avatar de raxper  
Fecha de Ingreso: enero-2010
Ubicación: ------
Mensajes: 472
Antigüedad: 14 años, 3 meses
Puntos: 2
Pregunta No se me ejecuta el setInterval

Tengo un problema con el setInterval que no se ejecuta por que no encuentra style creo :S.
Intenté con getElementsByName .. nada


Quiero que tenga el mismo efecto que el primero, pero en diferencia que el primero, sin señalarle el ID


<style>.top{padding:10px}</style>
<div class="top" onMouseOver="setInterval('auto()', 300)" id="primeros">Funciona! pero indicandole el ID</div>
<div class="top" onMouseOver="setInterval('auto2(this)', 300)">Tiene que funcionar sin ID y automático</div>

Código Javascript:
Ver original
  1. var color = ['#ccc','#f1f1f1','#aaa'];
  2. var num = 0;
  3. function auto(){document.getElementById('primeros').style.background = color[num]; num++; if(num==color.length) num=0;}
  4. function auto2(opcion){opcion.style.background=color[num]; num++; if(num==color.length) num=0;}
__________________
/^sleep:\/\//;
  #2 (permalink)  
Antiguo 03/02/2011, 16:48
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: No se me ejecuta el setInterval

buenas...
sucede que setInterval, al igual que otras funciones (setTimeout, Function, eval) interpretan el codigo en un contexto distinto cuando el primer argumento es un string. si en la funcion hicieras un alert del argumento pasado (this) notaras que dicho argumento representa el objeto window. para que te funcione correctamente, en lugar de pasar un string, tienes que pasar una funcion anonima que invoque la funcion deseada. es decir...
Código:
function(){auto2(this);}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 03/02/2011, 16:52
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: No se me ejecuta el setInterval

qué hace this?? es objeto window y tu necesitas objeto htmldivelement. algo como esto puede funcionar
Cita:
function auto2(opcion){div = opcion; opcion.style.background=color[num]; num++; if(num==color.length) {num=0;}t = setTimeout("auto2(div)",300);}

<div class="top" onMouseOver="auto2(this)">Tiene que funcionar sin ID y automático</div>
como ves he cambiado setInterval por setTimeout, creo que es mas adecuado
  #4 (permalink)  
Antiguo 03/02/2011, 17:30
Avatar de raxper  
Fecha de Ingreso: enero-2010
Ubicación: ------
Mensajes: 472
Antigüedad: 14 años, 3 meses
Puntos: 2
De acuerdo Respuesta: No se me ejecuta el setInterval

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...
sucede que setInterval, al igual que otras funciones (setTimeout, Function, eval) interpretan el codigo en un contexto distinto cuando el primer argumento es un string. si en la funcion hicieras un alert del argumento pasado (this) notaras que dicho argumento representa el objeto window. para que te funcione correctamente, en lugar de pasar un string, tienes que pasar una funcion anonima que invoque la funcion deseada. es decir...
Código:
function(){auto2(this);}
Gracias por la teoría ;), aunque lo había intentado algo así antes de preguntar.

Cita:
Iniciado por IsaBelM Ver Mensaje
qué hace this?? es objeto window y tu necesitas objeto htmldivelement. algo como esto puede funcionar

como ves he cambiado setInterval por setTimeout, creo que es mas adecuado
Tranquila Isabel no te amargues ^^ , me funcionó.
__________________
/^sleep:\/\//;

Etiquetas: setinterval
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 13:47.