IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

SETTIMEOUT(); en javascript


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut SETTIMEOUT(); en javascript
    Slt à tous,

    J'ai un petit problème avec une fonction "compte a rebour" :

    Entre HEAD et \HEAD j'ai mit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <SCRIPT LANGUAGE="JavaScript">
    	 function compte_a_rebour(temps){
    	 var i=0;
    	 for (i = 0, i<temps, i++)
    	 {
    	  window.setTimeout("document.getElementById('temps').innerHTML='"+i+"';",i+"000")
    	 }
    	 }
         </script>
    Et dans ma page il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body onLoad="compte_a_rebour('30');">
     
    <div id="temps"></div>
    Je comprends pas : le temps ne s'affiche pas dynamiquement, j'ai peut être fais des erreurs de syntaxe ( le javascript je m y fais pas ).

    Merci de me répondre au plus vite ^^

  2. #2
    Membre éprouvé Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Points : 1 042
    Points
    1 042
    Par défaut
    bonsoir,

    Bon voici un petit code tapé à la volé, je sais pas si c'est ce que tu souhaitais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <SCRIPT language=javascript>
    var i= 30;
    function compte_a_rebour(){
    	i--;
    	if (i <= 0){
    		clearsetInterval(tempo);
    	}
    	document.getElementById("temps").innerHTML= i+";";
    }
    tempo= setInterval('compte_a_rebour()',2000);
    </SCRIPT>
    Bizarrement, si tu passe en dessus des 2000 c'est pas terrible.

    Bon, c'est juste un petit compte à rebour, je sais pas si c'est ce que tu souhaitais.

    A savoir que .setTimeout retardera l'effet d'une fonction à tant de millisecondes, setInterval agira toutes les X millisecondes

    Voilà ++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour !

    Comme tu as pu le deviner, il y a deja pas mal d'erreurs de syntaxe, effectivement. Pour ne pas te 'lacher' le code correct inutilement, je vais plutot énumérer les quelques petites erreurs d'étourderies que tu as faites, et qu'on a tous faites.. au passage

    Allons-y...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onLoad="compte_a_rebour('30');"
    Ici tu appelles ta fonction compte_a_rebour (rebours ) et tu passes en paramètre une valeur chaine, c'est a dire, du texte... ok jusque là...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function compte_a_rebour(temps){
    	 for (i = 0, i<temps, i++)
    Mais ici, gros problème... tu essaies d'utiliser une valeur chaine en tant que nombre... et ca, pas bien Il faut, soit passer en paramètre un nombre (ce qui est le plus simple), soit, utiliser Number(temps) a CHAQUE fois

    De même ici, tu mélanges texte et nombres... seul un nombre est accepté dans ce paramètre, qui est le délai... multiplie tout simplement i par 1000

    - Dernière remarque, si tu souhaites que ce soit un compte a rebours, (30 à 0) il faut inverser les conditions dans ta boucle for {}...

    J'espère que je t'aurai aidé a cerner les petites erreurs que tu as faites, et voici le code fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    function compte_a_rebour(temps){
    	for (i = temps; i>=0; i--)
    	{
    		window.setTimeout("document.getElementById('temps').innerHTML='"+i+"';",((-1*i)+temps)*1000);
    	}
    }
    </script>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onLoad="compte_a_rebour(30);">
    Cordialement,
    @+

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Merci bcp ^^

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    On ne passe PAS de string à setTimeout, on lui passe une référence à une fonction ou au pire une fonction anonyme

    @Cruzty : Ton code qui est censé corrigé des erreurs en amène pas mal d'autres :

    -Tu ne déclare pas i, donc tu crèes une variable globale.
    -Tu passe une string à setTimeout est c'est mauvais
    -Tu utilises deux fois le mot temps pour deux élements totalement différents
    -Tu appelles x fois la fonction document.getElementById pour faire une action sur le même element ( )
    -Tu appelles window.setTimeout ce qui est totalement inutile puisque la méthode setTimeout fais partie du namespace global.
    -Accessoirement (-1*i)+temps et i*-1+temps font exactement la même chose, règle élementaire d'arithémétique. D'ailleurs cette deuxième écriture est autrement plus claire.

    ET NOM D'UNE PIPE, on n'utilise PAS l'attribut language pour un script javascript;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript"></script>

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    J'ai simplement corrigé son code. Si j'avais a faire un compte a rebours, il est certain que je ne ferai absolument pas comme ca, en balancant x fois la fonction setTimeout avec des délais différents. J'utiliserai setInterval pour décrémenter une variable en secondes, puis décomposer le tout en heures, minutes, secondes, etc...

    Je vais quand meme répondre pour etre plus clair :

    - i est la variable que j'utilise tout le temps dans mes boucles, et rien d'autre, je ne vois donc pas l'utilité de la délcarer.
    - je reprend son code ( setTimeout(code,millisec[,lang]), pour moi, c'est bien une fonction qui est rentrée, sauf qu'elle fait qu'une ligne)
    - je reprend son code
    - une fois de plus, je reprend son code. je ne ferai pas comme ca de toute facon, si on lance un compte a rebours de 10heures, j'imagine pas le carnage au chargement.
    - je reprend toujours son code, et ca ne change rien au fonctionnement
    - ce sont des habitudes de programmation, pour moi c'est plus clair avec les parentheses, pour toi non, chacun son style.
    - et j'ai bien utilisé l'attribut type.

    Il aurait été plus utile de ta part d'utiliser mes erreurs pour faire quelquechose de global, ainsi ajouter une solution pratique à ce probleme de compte a rebours. Et je trouve inutile de remanier le code fourni par quelqu'un, pour simplement montrer que l'on sait mieux faire. C'est pour cela aussi que j'ai utilisé la base de son code, sans vouloir faire à ma facon.

    Cordialement,
    Florian

  8. #8
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Le but n'est pas de montrer qui code le mieux, le but est surtout de dénoncer pas mal d'erreurs afin de produire un code propre, maintenance et qui respecte les bests practices.

    En l'occurence je t'indique des erreurs (puisque tu proposes du code censé fonctionner ou du moins aider) qui ne devrais pas figurer dans ton code, ou au moins être signalé comme mauvais, repris ou pas.

    Appeller une fonction 30 fois pour matcher le même element ça fait partie du bon sens que de le signaler comme très mauvais, inutile et incensé.

    C'est assez fréquent que je réécrive tout un script sur ce forum, seulement à l'heure ou j'ai écris ce message j'avais déja vu 3 scripts avec des setTimeout qui recoivent des strings en arguments, le tout affublé de code non factorisé et mal intégré. Les variables sont la pour qu'on leur affecte des valeurs...

    Un exemple flagrant de ton manque de rigeur est le fait que tu ne déclares pas tes variables, tu sais crée une globale à chaque itération?

    Tu sais que Javascript n'est pas bloc scoped?

    Tu utilises toujours i? Essaye de faire ce que tu fais avec des nested iterations (boucles imbriquées) pour voir le résultat...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    C'est dommage les gens comme ca sur les forums, ca détruit l'entraide...

    Ta mauvaise foi est de mise dans ces 2 messages. Je rédige une réponse a la hauteur de la tienne, évidemment cela ne te plait pas. Je ne vais pas me rabaisser à ton niveau, puisque tu sais tout, cela ne sert a rien de parler.

    Tu utilises toujours i? Essaye de faire ce que tu fais avec des nested iterations (boucles imbriquées) pour voir le résultat...
    Franchement, tu trouves cette question utile ? Le but est de me rabaisser ? Tu aura du mal...

    Ta mauvaise foi se ressentait dans ton premier message, j'ai eu confirmation avec le second.

    Je ne te connais pas, je suis nouveau ici. Je comptais m'installer petit à petit. Qu'importe... Ravi d'avoir pu AIDER, oui AIDER et pas critiquer Sawyer4 à 2 reprises, bonne continuation à lui dans ses projets.

    Grace à ton attitude déplorable d'etre supérieur qui pense tout savoir car il connait 3 termes anglais, ce forum compte un utilisateur de moins.

    Bonne continuation à vous, supprimez mes message si cela vous semble utile

  10. #10
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Tu prends mal le fait que je critique ton code, mais ce code par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(i=0;i<a.length;i++) {
    	if(a[i].meetsMyExpectations) {
    		var expected = array1[i].meetsMyExpectations;
    		for(i=0;i<expected.length;i++) {
    			/*Do something*/
    		}
    	}
    }
    Produira des résultats inatendus, simplement parce que l'iterateur n'est pas déclaré explicitement. Tu te braques, mais en y portant un peu de considération ça t'aiderais toi.

    Tu aides Sawyer4, en ne lui disant pas qu'il vaudrait mieux utiliser setInterval plutot que setTimeout, ça ne l'aide pas, il va juste copier coller un code fonctionnel sans ce poser de question, et essayer de voir quelle méthode est la meilleure et pourquoi.

    C'est pas ce que j'appelle de l'aide, mais plutot de l'assistanat, et ça n'a jamais aidé personne en quoi que ce soit.

    La critique quand on l'accepte, ça peut être un des meilleurs moteurs pour progresser...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JavaScript et setTimeout.Besoin information
    Par ovcrash dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/05/2009, 00h56
  2. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  3. Temporisation en javascript avec Settimeout function switch case
    Par Le_castor_déchainé dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/01/2009, 22h46
  4. window.setTimeout [Javascript] [debutant]
    Par sebus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 15h06
  5. [javascript] problème setTimeout
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2006, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo