Foros del Web » Programando para Internet » Javascript »

problemas con setTimeOut

Estas en el tema de problemas con setTimeOut en el foro de Javascript en Foros del Web. Buenas! Tengo un problema con un timer. Os expongo el código que uso: Clase1.php: Código: $ret = ""; for($i=0;$i<count($photos);$i++){ $ret .= "<img src=\"./img/".$photos[$i]->text."\" style=\"width: 100px;height: ...
  #1 (permalink)  
Antiguo 21/08/2012, 01:43
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
problemas con setTimeOut

Buenas!

Tengo un problema con un timer. Os expongo el código que uso:

Clase1.php:

Código:
$ret = "";
			
for($i=0;$i<count($photos);$i++){
	$ret .= "<img src=\"./img/".$photos[$i]->text."\" style=\"width: 100px;height: 100px;\" onMouseOver=\"photoTimer=setTimeout(maximize('".$photos[$i]->text."'), 5000)\"> ";
}
			
return $ret;
Funciones.js:

Código:
function maximize(id){alert(id);clearTimeout(photoTimer);}
He probado de definir la variable photoTimer en varios sitios, incluyendo un fichero .js aparte. La cosa es que no me hace timer, pero sí que llama a la función.

El efecto que (se supone) debería suceder es que al estar X tiempo sobre una foto saliera un div con la foto en tamaño real (ya se que la función solo hace un alert, aún estoy probando que funcione el timer...)

Qué es lo que hago mal?
Gracias
  #2 (permalink)  
Antiguo 21/08/2012, 06:57
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problemas con setTimeOut

Prueba así:

Cita:
onmouseover=\"window.photoTimer=...
Cita:
clearTimeout(window.photoTimer)
  #3 (permalink)  
Antiguo 21/08/2012, 07:56
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: problemas con setTimeOut

buenas...
nótese el orden de invocación. cuando el evento ocurre la función maximize se invoca pero no transcurrido los cinco segundos. esto porque estás invocando maximize y el resultado de este es lo que el timer está utilizando. es decir...

Código:
// lo que que tienes ;
 onMouseOver="photoTimer=setTimeout(maximize('ID'), 5000)"

// lo que deberías tener ;
onmouseover="photoTimer=setTimeout(function(){maximize('ID');}, 5000);"
en la segunda línea lo que estás proporcionando es una función que luego el timer invocará.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 22/08/2012, 00:24
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: problemas con setTimeOut

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...
nótese el orden de invocación. cuando el evento ocurre la función maximize se invoca pero no transcurrido los cinco segundos. esto porque estás invocando maximize y el resultado de este es lo que el timer está utilizando. es decir...

Código:
// lo que que tienes ;
 onMouseOver="photoTimer=setTimeout(maximize('ID'), 5000)"

// lo que deberías tener ;
onmouseover="photoTimer=setTimeout(function(){maximize('ID');}, 5000);"
en la segunda línea lo que estás proporcionando es una función que luego el timer invocará.

Era eso, ya me funciona.

Gracias a ambos por contestar, y sobretodo por contestar con contenido relacionado a mi pregunta (tenía miedo que alguien me recomendara jquery o me dijera que tendría que usar otra función )
  #5 (permalink)  
Antiguo 22/08/2012, 07:45
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: problemas con setTimeOut

Buenas de nuevo,
Perdón por postear 2 veces seguidas...

Me ocurre otro problema... estoy intentando añadir un handler a posteriori, usando este código:

Código:
function maxMonth(a, c, i){
  newH(document.getElementById(i), 
            'MouseOver', 
            function(){
                                photoTimer = setTimeout(function(){maxiM(a,c,event)}, 1000)
                            }
            );

  newH(document.getElementById(i), 
            'MouseOut', 
            function(){
                document.getElementById('auxM').className='dummy3';
                           }
            );
}

function newH(el, ev, fu){
  if(el.addEventListener){
    el.addEventListener(ev, fu, false);
  }else{
    el.attachEvent("on"+ev, fu);
  }
}

maxiM(a, c, event){//código que funciona}
El javascript no me da error, pero no me añade los handler... ¿Qué puede ser?
  #6 (permalink)  
Antiguo 22/08/2012, 10:16
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: problemas con setTimeOut

en javascript, los handler son case-sensitive. no es lo mismo MouseOver que mouseover. debes escribir todos los handler en minúsculas.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 22/08/2012, 23:00
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: problemas con setTimeOut

Gracias, funciona perfecto!

Lo curioso es que desde php siempre los defino del mismo modo (onMouseOver, onMouseOut, onClick...) y nunca me habían fallado... lo tendré en cuenta y los cambiaré a minúsculas, por si acaso

Etiquetas: funcion, js, php, settimeout
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 02:23.