11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous !
J'ai un petit soucis en javascript, je m'en réfère donc à vos connaissance Smiley cligne
Je génère en php une fonction javascript afin d'afficher des phrases toutes les x secondes.
J'ai donc un tableau contenant les phrases a afficher :


function affichage(){
   var tableau = new Array;
   var i = 0;
   tableau[0] = "Blabla bla bla <br />";
   tableau[1] = "Un autre truc à afficher<br />";
   tableau[2] = "Bla bla bli<br />";
   // etc...

   var nb = tableau.length // Je compte le nombre de lignes

   //Je définis ensuite un délai en l'affichage de ces phrases
   var delai = 2000; // En millisecondes


Puis je souhaite que les phrases s'affichent dans un div


setTimeout(affiche_texte(tableau[ i]),delai);
   i++;
   if(i == nb)
      clearTimeout;
}
	
function affiche_texte(texte){
   document.getElementById('mon_div').innerHTML = texte;
}


Et c'est la que les choses se corsent...
Je n'ai que la première phrase qui s'affiche (c'est déjà un début). Après firebug me rapporte une erreur :

useless setTimeout call (missing quotes around argument?)
setTimeout(affiche_texte(tableau[ i]),delai);


Je bloque depuis un petit moment car je ne vois pas comment faire...
De plus, j'ai peur que le innerHTML m'efface ma div et ne m'affiche que la derniere phrase...

Merci d'avance !
Modifié par numerodx (03 Apr 2009 - 18:00)
Bonjour numerodx,

La fonction setTimeout n'accepte pas de paramètres.
Il faut donc déclarer des variables globales qui seront accessibles dans toutes les fonctions.

J'ai repris ton code comme ceci:
//Variables globales
var i = 0;
var texte = '';

   var tableau = new Array;

   tableau[0] = "Blabla bla bla <br />";
   tableau[1] = "Un autre truc à afficher<br />";
   tableau[2] = "Bla bla bli<br />";
   // etc...
// Fin des variables globales

function affichage(){
   var nb = tableau.length // Je compte le nombre de lignes

   //Je définis ensuite un délai en l'affichage de ces phrases
   var delai = 2000; // En millisecondes

texte = tableau[ i];
   document.getElementById('mon_div').innerHTML = texte;//affiche la phrase dans la div

if(i < parseInt(nb) -1) setTimeout(affiche_texte, delai);//appelle la 2ème fonction si on n'a pas atteint la fin du tableau

   i++;

}
	
function affiche_texte(){

   setTimeout(affichage, 0);//Appelle à nouveau la première fonction
}


Ca fonctionne impec chez moi.
Smiley cligne