SetTimeout et getElementById [Résolu]

Signaler
Messages postés
22
Date d'inscription
mercredi 18 octobre 2006
Statut
Membre
Dernière intervention
13 avril 2009
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
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

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
16
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)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
16
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)
Messages postés
1784
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
28 avril 2021
128
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';
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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
Messages postés
22
Date d'inscription
mercredi 18 octobre 2006
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
22
Date d'inscription
mercredi 18 octobre 2006
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
16
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)
Messages postés
22
Date d'inscription
mercredi 18 octobre 2006
Statut
Membre
Dernière intervention
13 avril 2009

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.