11546 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Dans mon code (ci-dessous), j'utilise un setInterval qui ne s'execute qu'UNE fois. J'ignore pourquoi.
Aidez-moi, s'il vous plait!

(Je précise que je débute)



<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>Mal au crâne</title>
                  
    </head>
    
    <body>
        <?php
      
            $cmpt = 0;
            $i = 0;
            $items = array("cle", "cle1", "cle2", "cle3", "cle4", "cle5", "cle6", "cle7", "cle8");
            
            foreach ($items as $item){
                $imgPath[] = $item;
                $cmpt += 1;    
            }
            function nextPoster ($i, $cmpt, $imgPath){
                global $i;
                $i++;
                if($i >= $cmpt)
                    $i = 0;
                return $imgPath[$i];
            }
            
                ?>
        
        <div id="poster" >
                <?php echo $imgPath[$i]; ?>
            <script type="text/javascript">
                var intervalID = this.setInterval(function() {nextPhoto();}, 5000);
            </script>
        </div>
        
        
   <script type="text/javascript">
        function nextPhoto(){
            var contenu = document.getElementById("poster");
            <?php $temp = nextPoster($i, $cmpt, $imgPath); ?>
            var photoURL = "<?php echo $temp; ?>";
            var imConst = "l'image "+ photoURL + " " + "<?php echo $i; ?>";
            contenu.innerHTML = imConst;
        }
    </script> 
    </body>

</html>


Modifié par styde (08 Dec 2011 - 22:47)
salut...

Parce que tu ne lance le setinterval qu'une fois Smiley smile

il faut le mettre dans la fonction nextphoto...

et lancer normalement la fonction au chargement de la page...
Merci beaucoup pour la réponse.

J'ai essayé de faire comme suggéré (si j'ai bien compris) mais ça n'a pas marché non plus, malheureusement. setInterval n'est pas sensé être lancé une fois et se répèter

Ici le bout de code:

<div id="poster" >
                <?php echo $imgPath[$i]; ?>
            <script type="text/javascript">
                window.onload = function (){nextPhoto();};
            </script>
        </div>
        
        
   <script type="text/javascript">
        function nextPhoto(){
            var contenu = document.getElementById("poster");
            <?php $temp = nextPoster($i, $cmpt, $imgPath); ?>
            var photoURL = "<?php echo $temp; ?>";
            var imConst = "l'image "+ photoURL + " " + "<?php echo $i; ?>";
            contenu.innerHTML = imConst;
            var intervalID = setInterval(function() {nextPhoto();}, 5000);
        }
    </script> 
pchlj a écrit :
Parce que tu ne lance le setinterval qu'une fois Smiley smile
il faut le mettre dans la fonction nextphoto...
et lancer normalement la fonction au chargement de la page...

Il me semble que c'est la méthode à employer avec window.setTimeout. Pas avec window.setInterval.

Pour window.setInterval, déjà peut-être l'appeler avec window et pas avec this (qui fait référence à l'objet window vu le scope, mais si tu changes ton code et imbriques ces lignes dans une fonction à un moment donné tu vas avoir des surprises).
Ensuite, les exemples donnés dans la doc de Mozilla utilisent une référence de fonction plutôt qu'une fonction anonyme. Je ne sais pas si ça joue ici...
en effet fvsch.... t'as raison j'ai confondu...

bon voici un exemple d'appel et de fonctionnement de setInterval que j'ai déjà souvent utilisé Smiley smile

<SCRIPT language=javascript>
   function Horloge() {
       var dt=new Date();
       window.status=dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds();
   }
   var timer=setInterval("Horloge()", 1000);
</SCRIPT>
<A href='javascript:clearInterval(timer)'>Arrêter l'horloge</A>
Bonjour,
styde a écrit :
Ici le bout de code:

Pour que l'on puisse comprendre ton problème, il faut l'isoler. Enlever le code PHP car il dépend d'un contexte que nous ne connaissons pas et qu'il pollue la compréhension serait déjà un bon début. Smiley smile

@pchlj : écrire du code JS dans des chaînes de caractères, c'est à éviter.
Bonsoir à tous,
J'ai résolu mon problème en séparant le code JS du php.
Merci à tous ceux qui ont pris le temps de me répondre.