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
    Membre averti
    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
    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 �m�rite 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 : 44
    Localisation : France, Rh�ne (Rh�ne Alpes)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    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
    Membre � l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    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 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    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 659
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  5. #5
    Membre averti
    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
    Par d�faut
    Merci bcp ^^

  6. #6
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    336
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    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
    Membre � l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    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 chevronn�
    Inscrit en
    Novembre 2006
    Messages
    336
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    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
    Membre � l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    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 chevronn�
    Inscrit en
    Novembre 2006
    Messages
    336
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    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