Foros del Web » Programando para Internet » Javascript »

problema con setTimeout() y clearTimeout()

Estas en el tema de problema con setTimeout() y clearTimeout() en el foro de Javascript en Foros del Web. Hola , como estan, bueno yo con algunos problemas javascript. estoy haciendo un menu desplegable que funciona bien , pero luego me di cuenta que ...
  #1 (permalink)  
Antiguo 14/11/2007, 10:26
 
Fecha de Ingreso: febrero-2006
Mensajes: 208
Antigüedad: 18 años, 2 meses
Puntos: 0
problema con setTimeout() y clearTimeout()

Hola , como estan, bueno yo con algunos problemas javascript.

estoy haciendo un menu desplegable que funciona bien , pero luego me di cuenta que debia hacer desaparecer el menu desplegado cuando el usuario no esté sobre el menu, para que asi no se quede pegado todo el tiempo el menu desplegado (ojala se entienda lo que explico )

bueno entonces mi idea es utilizar setTimeout , para que cuando el usuario este en el mouseout del menu , este desareciera en un par de segundos.

Código PHP:
function inicia_timer(){
    var 
borra setTimeout("show()",2500);
    
}

//la funcion show


function show(id) {



var 
document.getElementById(id); // ul emergente

        // aqui borramos todos los sub menues para que nose queden seleccionados por defecto
        
document.getElementById('sub_quienes').style.display='none';
          
document.getElementById('sub_operaciones').style.display='none';
           
document.getElementById('sub_productos').style.display='none';
            
document.getElementById('sub_calidad').style.display='none';
             
document.getElementById('sub_compromiso').style.display='none';
    
if (
d) {d.style.display='block';

clearTimeout(borra);
document.getElementById('mensage').innerHTML='no se ejecuta el settimeout';
}

bueno y en los botones hago la siguiente llamada:

Código HTML:
<a href="#" id="btn1" onmouseover="javascript:show('sub_quienes','btn1');"  onmouseout="javascript:inicia_timer();">quiene</a> 
y funciona bien, pero ese boton luego esta dentro de un ul que tiene unos li a , con links, entonces la idea seria que en cada link de esos 'ul li a ' cuando se este en el estado hover no se ejecute el settimeout.

supongo que en este caso lo mejor seria utilizar settimeout no??
cuando genero varias llamadas a la funcion settimeout es posible que algunas se queden en la memoria y por eo creen conflictos..

mi problema tambien es que en la consola de errores de firefox aparece ...
ERROR : borra is not defined y me apunta a la linea de codigo

clearTimeout(borra); que esta dentro de la funcion show()

agradecería mucho que alguien me pueda ayudar

saludos cordales
__________________
michelson
-----------------
crossing snow mountains with a yamaha bike
  #2 (permalink)  
Antiguo 14/11/2007, 10:46
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: problema con setTimeout() y clearTimeout()

Hola:

Si la variable borra la defines dentro de una función es inaccesible de forma global, así que deberás crearla fuera:
var borra;
function inicia_timer(){
borra = setTimeout("show()",2500);
}

La verdad es que usar una etiqueta a (enlace) para desplegar un menú me parece poco "semántico"... particularmente usaría un span y omitiría el odioso href="#"... y para que salga la "mano" usaría estilos (cursor: pointer)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 14/11/2007, 12:22
 
Fecha de Ingreso: febrero-2006
Mensajes: 208
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: problema con setTimeout() y clearTimeout()

Hola Caricatos muchas gracias por tu ayuda.
ahora funciona funciona de maravillas..


molte grazie!
__________________
michelson
-----------------
crossing snow mountains with a yamaha bike
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 21:51.