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 :

De l'utilisation de setTimeout


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut De l'utilisation de setTimeout
    Bonjour,

    j'ai un problème qui me prend la tête depuis quelques heures, je n'arrive pas à utiliser la méthode SetTimeout.

    Mon problème est que je désire appeler une fonction avec un paramètre au bout de x millisecondes.

    La fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function CacheMenu(code)
    {
     
     getElementById(code).style.display=\'none\'; 
     
    }
    Le code php

    onmouseout="setTimeout(CacheMenu(\''.$code_section_child.'\'),5000)"

    Alors j'arrive à faire marcher la fonction mais sans paramètre. LE truc c'est que pour ne plus avoir de messages d'erreur, j'ai trouvé sur le net qu'il faut encadrer les paramètres avec des quotes.
    Ce qui me donne

    onmouseout="setTimeout(\'CacheMenu(\''.$code_section_child.'\')\',\'5000\')"
    Mais du coup mon paramètre PHP n'est pas passé correctement...

    Merci à celles et ceux qui pourront m'aider.

  2. #2
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseout="setTimeout(function(){CacheMenu(\''.$code_section_child.'\')},5000)"
    Le premier argument de setTimeout est un callback, et non une fonction normale, donc tu ne peux pas lui passer de paramètre directement puisque le moteur de javascript s'attend à une fonction sans argument.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Arg... La réponse que je redoutais.

    J'avais également essayé un truc du genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseout="CacheMenu(\''.$code_section_child.'\')"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script language="javascript">
     
    function CacheMenu(code)
    {
     
    setTimeout(\'document.getElementById(code).style.display=none\',\'2000\')
     
    }
     
    </script>
    Sans succès non plus (Erreur:code is not defined). Normal je suppose au vu de la disposition des quotes.

    J'ai donc fait d'autres essais :

    setTimeout(document.getElementById(code).style.display=\'none\',\'2000\')
    ->Le setTimeout ne semble pas marché et j'ai l'erreur "none is not defined" au bout de 2 secondes.

    idem sans quotes du tout.

    J'aurai voulu également tester un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <script language="javascript">
     
    function CacheMenu(code)
    {
    var super_code=code;
     
    setTimeout("Cache()","2000");
     
    }
     
    function Cache();
    {
     
    document.getElementById(super_code).style.display="none";
    }
     
    </script>
    MAis cette solution pose un problème évident de portée de variable. J'aurais besoin de déclarer une variable globale à l'intérieur d'une fonction. C'est possible en javascript?

    Merci pour ton aide.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tout d'abord, il est préférable de poster du code (HTML ou JavaScript) généré plutôt que du PHP, cela permet de détecter plus facilement les erreurs de syntaxe et de toutes façons, c'est uniquement ce code-là qui est interprété par le navigateur.

    Ensuite, concernant le setTimeout, comme indiqué par DoubleU, cette fonction admet comme 1er argument un callback, que l'on trouve soit sous la forme d'une chaine de caractère soit une fonction.
    Par exemple, tu peux utiliser une syntaxe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setTimeout(function(){
        // Ici, le corps de ta fonction.
    },2000)
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Désolé pour le code PHP. Je le ferai plus ^^

    J'avais pas pensé à cette solution. Après quelques bidouilles ca marche bien.
    Merci beaucoup.

    A retenir pour les prochains, pas d'arguments dans le premier paramètre (je m'en doutais un peu car je ne trouvais aucun exemple avec paramètre sur le net, mais ce n'était pas dit explicitement).

    A bientôt probablement.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 65
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Tout d'abord, il est préférable de poster du code (HTML ou JavaScript) généré plutôt que du PHP, cela permet de détecter plus facilement les erreurs de syntaxe et de toutes façons, c'est uniquement ce code-là qui est interprété par le navigateur.

    Ensuite, concernant le setTimeout, comme indiqué par DoubleU, cette fonction admet comme 1er argument un callback, que l'on trouve soit sous la forme d'une chaine de caractère soit une fonction.
    Par exemple, tu peux utiliser une syntaxe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setTimeout(function(){
        // Ici, le corps de ta fonction.
    },2000)
    Et si on souhaite faire un appel récursif dans la fonction qui est définie à l'intérieur du setTimeout ? y a une solution ?


    edith : ha ben j'ai trouvé. Je rappelle que mon problème concernait l'appel récursif d'une fonction avec plusieurs paramètre au travers d'un setTimeout.
    C'est un peu crado mais sachant que mes arguments ne sont pas modifiés en cours d'exécution du script, suffit de les déclarer en global

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

Discussions similaires

  1. utilisation d'une tempo (setTimeout)
    Par cortex59 dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 26/06/2008, 13h47
  2. De l'utilisation de setTimeout
    Par maximus09 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/05/2008, 16h20
  3. Erreur retournée si j'utilise setTimeout
    Par pegase29li89 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/02/2008, 18h16
  4. Utilisation de setTimeout avec des classes : BUG!
    Par seb-oulba dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2006, 09h43
  5. Complément d'info sur l'utilisation de settimeout
    Par WhyMee dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2006, 13h08

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