Partage
  • Partager sur Facebook
  • Partager sur Twitter

Quel évènement choisir ?

Sujet résolu
    11 décembre 2010 à 9:36:02

    Bonjour :)

    Etant débutant en JavaScript, j'ai voulu réaliser une fonction qui permet de réaliser un compte à rebours pour m'améliorer. Apparemment, il n'y a aucune erreur dans le script... Sauf que j'ai du mal à choisir le bon évènement pour déclencher la fonction.

    Voici le code JS
    function rebours(minuts, seconds) {
    
    	if(minuts == 0 && seconds == 0) 
    		document.getElementById('t_restants').innerHTML = '<strong>Fini !</strong>';
    	else {
    	        var result = minuts + ':';
    		
    		if(seconds < 10) 
    			result += '0'+seconds;	
    		else 
    			result += seconds; 
        
    		
    		if(seconds == 0) { 
    			seconds = 59; 
    			minuts = minuts - 1; 
    		} else {
    			seconds = seconds - 1; 
        }
    		document.getElementById('t_restants').innerHTML = result; 
    		setInterval("rebours("+minuts+","+seconds+")", 1000);
      }
    }
    


    <span id="t_restants"></span>
    


    Evidemment rien ne s'affiche sur la page HTML. Par contre, si j'ajoute un évènement dans ma balise <span> ça marche très bien ;)

    <span id="t_restants" onclick="rebours(1, 33);">Cliquez ici !</span>
    



    Je voudrais donc savoir d'où vient le problème. Dois-je obligatoirement ajouter un évènement pour que ça marche ? si oui lequel ?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Développeur et Modérateur pour GW2.FR.
      11 décembre 2010 à 11:13:37

      Si tu veux que le compte à rebours commence tout seul, un simple :
      window.onload = function() { rebours(1, 33); };

      à la fin de ton JS suffira.
      • Partager sur Facebook
      • Partager sur Twitter
        11 décembre 2010 à 11:17:50

        [ grillé, j'ai écris un roman : ]
        Salut,
        setInterval ne s'utilise pas comme ça :

        // PAS BIEN
        setInterval("rebours("+minuts+","+seconds+")", 1000);
        


        ...mais comme ça :

        // BIEN
        setInterval( function(){
            rebours( minuts, seconds );
        }, 1000 );
        


        Et ici, c'est setTimeout qu'il faut utiliser, puisque l'appel se fait dans la fonction rebours.
        Si tu veux utiliser setInterval, fais le en dehors de la fonction, sinon tu fini avec une affinité d'appel. Essaie ce code pour comprendre le problème ( et regarde la barre title, et la conso CPU ) :

        t = 0;
        function f(){
        	document.title = t++;
        	setInterval( f, 1000 );
        }
        f();
        


        À terme, la fonction est appelée plus d'un million de fois par seconde !!

        Enfin, je comprends pas ce que tu veux, lancé le compte à rebours au chargement de la page ?


        • Partager sur Facebook
        • Partager sur Twitter
          11 décembre 2010 à 13:01:29

          Citation : LCaba

          Enfin, je comprends pas ce que tu veux, lancé le compte à rebours au chargement de la page ?



          Oui, j'voudrais lancer le compte à rebours au chargement de la page.
          Sauf que j'appelle la fonction dans un code PHP :)
          • Partager sur Facebook
          • Partager sur Twitter
          Développeur et Modérateur pour GW2.FR.
            11 décembre 2010 à 14:59:37

            Citation : Hirokoshi


            Sauf que j'appelle la fonction dans un code PHP :)




            Sauf que ça veut absolument rien dire cette phrase, le PHP n'appel pas de JavaScript.

            Tu fais les améliorations dites par LCaba, tu mets mon window.onload = ...; et basta :)
            • Partager sur Facebook
            • Partager sur Twitter
              12 décembre 2010 à 17:13:59

              Salut Tiller !

              Désolé, j'ai vraiment zappé ta réponse...

              Merci tout les deux, ça marche !
              • Partager sur Facebook
              • Partager sur Twitter
              Développeur et Modérateur pour GW2.FR.

              Quel évènement choisir ?

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown