[javascript et CSS] setTimeout et style

Fermé
velociraptor - 1 avril 2007 à 12:41
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 - 1 avril 2007 à 22:10
Bonjour,

Je sollicite votre aide pour un problème plutôt orienté javascript, mais qui concerne aussi les propriétés de style.

Voilà, j'ai un menu déroulant et je me sert de javascript pour afficher ou non les onglets. Quand la sourie quitte l'onglet, il disparaît. Jusque là, rien de compliquer... Maintenant je veux rajouter un délais avant que l'onglet disparaisse, histoire d'avant une navigation plus facile, et là, c'est le drame !

Je me suis dis qu'un setTimeout serait approprié, mais au final, l'onglet apparaît et ne disparaît pas ! J'ai essayé sous IE comme firefox, même résultat... La console javascript de firefox ne me dis absolument rien, pratique pour le débogage...

Donc je me tourne vers vous !

voilà mon code :


// détection de la base du menu en fonction du navigateur
// on fixe la variable l dessus
if(document.getElementById("Menu"))
var l=document.getElementById("Menu").getElementsByTagName('LI');
else
	var l=document.getElementById("MenuIe").getElementsByTagName('LI');
	
for ( var n=0; n<l.length; n++ )
{
	l[n].unselectable="on";	/* pour faire plus propre : "non sélectionnable", ne fonctionne pas avec FF ? */
	if( l[n].getElementsByTagName('UL') && l[n].getElementsByTagName('UL').length>0 )
	{
// evenement onmouseover marche bien
		l[n].onmouseover = 	function()	
					{	
						this.getElementsByTagName('UL')[0].style.visibility="visible";
					}	
		
// le problème est ici :
// la première ligne devrait marcher...
// le code en commentaire marche par contre, mais sans délais...
		l[n].onmouseout = 	function()	
					{	
						setTimeout("this.getElementsByTagName('UL')[0].style.visibility='hidden';", 1000);
						//this.getElementsByTagName('UL')[0].style.visibility="hidden";
					}
	}
}



voilà, merci pour votre aide,

Alexandre
A voir également:

1 réponse

Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
1 avril 2007 à 22:10
Il s'agit d'un problème de guillemets encore une fois. Et le "this" ne sait plus qui il est.

ppk, en hollande, explique en détail dans son site internet comment utiliser "this". Fais une recherche.

Ce serait plus simple si tu nommais la fonction qui fait disparaître et que tu l'appelais avec ton onmouseout. Par exemple:

Function cachemenu(myelement) {
myelement.getElementsByTagName('UL')[0].style.visibility="hidden";
}

et

l[n].onmouseout = function() {
setTimeout(cachemenu('this'), 1000);
}

ou quelque chose comme ça. La syntaxe dans mon setTimeout n'est pas parfaite.

Serge.
0