Javascript : problème avec window.setTimeout

Résolu/Fermé
Code42 Messages postés 3 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 23 avril 2009 - 22 avril 2009 à 14:36
Code42 Messages postés 3 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 23 avril 2009 - 23 avril 2009 à 09:54
Ami(e)s développeurs(se) je vous salue !

Débutant en programmation je solicite votre aide pour un problème que je n'arrive pas à solutionner en Javascript, et ce, malgré quelques recherche sur la toile (Google n'est pas mon ami aujourd'hui ^^).

Voilà le topo :

Sur une page XHTML, je souhaite changer automatiquement une image via Javascript. L'image en question est contenue dans une div. A savoir, toutes les images que je souhaite afficher/cacher sont toute présente dans le source (généré en php) dans des div différentes et cachés grâce à la propriété CSS 'display:none;'. Rien d'extraordinaire me diriez vous. Cependant, je n'arrive pas à comprendre pourquoi mon script ne fonctionne pas.

Voici le code en question :

 function autoHideAndShow(elem, offre, cpt){
		for(var i = 0; i < cpt; ++i){
			document.getElementById(elem + i).style.display = 'none';
		}
		document.getElementById(elem + offre).style.display = '';
		++offre;
		if(offre == cpt){
			offre = 0;
		}
		window.setTimeout('autoHideAndShow(elem, offre, cpt)', 5000);
	}


La paramètre elem est une chaine de caractère. C'est la valeur que partage les id de mes div. Petite précision avant que certains me jettent des tomates, le paramètre offre permet de savoir quel div traiter. En effait offre est un int qui permet me d'avoir des id unique ^^. Quand à cpt, c'est un int qui a pour valeur le nombre total de div à traiter sur ma page.

Le problème :

Et bien window.setTimeout() ne "claque" pas. J'ai placé des traces afin de voir si le code est entièrement parcouru, verifié avec firebug la valeur de mes variables, tout va bien, juste la méthode setTimeout qui veux pas s'exécuter.

Des suggestions ?

Merci d'avance pour votre aide.

Code42.

3 réponses

Code42 Messages postés 3 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 23 avril 2009 1
22 avril 2009 à 15:11
Bon bah honte sur moi, j'ai malgré tout continué mes recherches, et j'ai finalement trouvé une solution.

Pour ceux à qui ça peu intéresser, les fonctions passées en argument de la méthode setTimeout () ne peuvent avoir de paramètres. J'ai donc fini par utiliser des variables global...

Bonne journée et à bientôt surement !!!
1
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
22 avril 2009 à 19:30
Bsr

Bien sûr qu'on peut passer des paramètres via SetTimeout ;-)

Pas directement certe mais en utilisant une fonction anonyme et une closure

Ex

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<title>SetTimeout</title>
	<link rel="stylesheet" type="text/css" href="frame.css" />
	<script>
		function autoHideAndShow(cpt){
			var elt = "cpt = "+document.getElementById("resultat");
			var compteur = cpt;
			resultat.innerHTML = compteur;
			compteur += 100;
		    window.setTimeout(function(){autoHideAndShow(compteur);}, 5000);	
		}
	
		function load()
		{
			autoHideAndShow(0);			
		}

	</script>
</head>
<body onload="load()"><div id="resultat"></div>
</body>
</html>



Ca marche aussi avec des objets via call() ou apply() et ça c'est top !

Bon faut qd même faire gaffe aux memory leaks avec ce genre de syntaxe surtout sous IE ;-)

0
Code42 Messages postés 3 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 23 avril 2009 1
23 avril 2009 à 09:54
Bonjour,

Merci pour ces présisions PhP. Ces informations vont m'être utile !

Code42
0