SetTimeout et getElementById

Résolu
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009 - 19 févr. 2009 à 17:12
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 20 févr. 2009 à 11:56
Bonjour,

Je cherche à mettre le fond d' éléments html en bleu toute les x secondes (en passant les détails). Seulement voilà, le code suivant bloque (le cas pour FF et IE7) au niveau de la ligne de getElementById:

function SlideShow()
{
    if(slideshow)
    {
        document.images.dsimage.src = eval("image"+processedimg+".src");
        document.getElementById("tab"+processedimg).style.background = 'blue';
        if(processedimg < img_number) processedimg++;
        else processedimg = 1;
    }
    setTimeout("SlideShow()", timer); //Go to function "SlideShow" before a lapsed time
}

Alors que ceci marche:

function SlideShow()

{

    if(slideshow)

    {

        document.images.dsimage.src = eval("image"+processedimg+".src");

        if(processedimg < img_number) processedimg++;

        else processedimg = 1;

    }

    setTimeout("SlideShow()", timer); //Go to function "SlideShow" before a lapsed time
    document.getElementById("tab"+processedimg).style.background = 'blue';

}

J'ai passé l'après-midi à creuser les forums mais rien. Merci d'avance.

8 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
19 févr. 2009 à 19:42
Bonjour,
processedimg est donc une variable
globale qui vaut combien la 1st fois ?

dans le 2nd exemple la variable étant bornée le problème ne se pose peut
être pas
j'essaierais

function SlideShow(){
  if(slideshow){

    document.images.dsimage.src = eval("image"+processedimg+".src");

    var Obj = document.getElementById("tab"+processedimg);
    if( Obj)

      Obj.style.background = 'blue';

    if(processedimg <
img_number)
      processedimg++;
    else
      processedimg = 1;

  }
  setTimeout("SlideShow()", timer); //Go to
function "SlideShow" before a lapsed time
}
pour voir
si cela passe au 2nd coup...
mais je suis peut être complétement à la rue
;O)
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
20 févr. 2009 à 11:56
Bonjour,
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, lancement de la fonction SlideShow les les
balises avec les id tab ne sont pas encore lu par le
programme</td>
</td></tr></tbody></table>dans ce
cas la fonction doit être mise sur l'événement onload du document ou en fin de
document, après la création effective des DIVs.
Il reste néanmoins
surprenant que ta deuxième méthode fonctionne à chaque fois, mais bon le
principal est que cela marche...
;O)
3
@karamel Messages postés 1830 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 2 juin 2023 147
19 févr. 2009 à 17:48
bonjour
et t'a essayer de mettre cette ligne au dessus

 if(processedimg < img_number) processedimg++;
        else processedimg = 1;
document.getElementById("tab"+processedimg).style.background = 'blue';
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
19 févr. 2009 à 18:14
bonjour,

    if(slideshow)      c'est quoi slideshow ?
    img_number       ça vaut combien ?
    "tab1" "tab2"...   ça va jusqu'où ? c'est quelle balise ?

      eval("image"+processedimg+".src");   sert à quoi eval ?
          mage"+processedimg+".src"  tout seul çà doit le faire non ?

Cordialement

[mon Site][M'écrire]Bul
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
19 févr. 2009 à 18:41
Kazma -> Oui, bien sûr et c'est la même chose.

Bul3 ->
-slideshow: boolean qui active ou non le diaporama
-img_number = 5
-tab1, tab2 ca va jusqu'à img_number, c'est à dire 5, ce sont des balises
-eval: execute directement la chaine de caractere comme du javascript, non tout seul ca ne marche pas
0
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
19 févr. 2009 à 20:19
Super, ça marche ! J'avais pourtant essayé un truc du genre mais la condition if( Obj) elle sert à quoi ( parceque c'est ça qui change tout).

Merci à toi pour l'aide rapide et efficace
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
19 févr. 2009 à 20:39
Si comme je le suppute, sans l'être, ta variable n'est
pas initialisée, pas de valeur affectée, donc au premier passage elle vaut undefined.
l'ID que tu demandes à getElementById est dans ce cas tabundefined qui n'existe pas, il
vaut null.
Le if( Obj) permet simplement de tester s'il existe et
dans ce cas on change le style, dans le cas contraire on ne fait rien si ce
n'est comtinuer les instructions de la fonction.

La bonne solution reste
quand même d'initialiser la variable au départ, c'est le BaBA...
var processedimg = 1;
;O)
0
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
19 févr. 2009 à 20:46
processedimg est bien initialisée a 1, c'est plutot de tab dont on parle et effectivement au lancement de la fonction SlideShow les les balises avec les id tab ne sont pas encore lu par le programme . Merci encore ;) je te suis trés reconnaissant, et merci à tous.
0