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 :

Fonction setTimeout() pour menu deroulant


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Fonction setTimeout() pour menu deroulant
    Bonjour,
    J'ai créé un menu déroulant avec une tempo d'affichage du menu. Le menu s'affiche sur un onMouseOver() qui lance une fonction afficheMenu() qui affiche le menu. Dans cette fonction je lance une tempo avec setTimeout() qui lance à son tour une autre fonction cacheMenu() qui cache le menu après 3 secondes, mais voilà j'ai une erreur sur la page lorsqu le code doit disparaitre (inscrit en bas du navigateur "erreur sur la page" à cause de cette fonction).
    Quand je met un alert() comme fonction dans setTimeout() cela fonctionne bien ?
    j'utilise IE7. Le page se trouve dans un frame. La fonction est appelée dans un script javascript ".js"
    Voici le code si quelqu'un peu m'aider merci.
    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
    //////////////////////////////////////////////////////////////////////////:
    // affichage menu déroulant
    //////////////////////////////////////////////////////////////////////////:
     
    function afficheMenu(id){
      //alert("affiche "+id);
      document.getElementById(id).style.display='block';
      //setTimeout("alert('test setTimeout')",3000);
      setTimeout("cacheMenu(id)",3000);
     
      }
     
    function cacheMenu(id){
        //alert("cache "+id);
      	document.getElementById(id).style.display='none';
    	exit();
    }

  2. #2
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Points : 83
    Points
    83
    Par défaut
    Je suppose que cela est peut-être du au fait que ta variable id n'est pas globale (et c'est mieux comme cela). Essaye de mettre ceci pour le timeout et dis nous ce que cela donne :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout("cacheMenu(\""+id+"\")",3000);

    Cordialement.

  3. #3
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function(){cacheMenu(id)},3000);
    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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    Bonjour à vous 2 et merci !
    J'ai essayé les 2 solutions et cela fonctionne !, mais j'aimerais comprendre:

    - Pour herfrayg STP, pourquoi le fait de mettre le id de cette façon: \""+id+"\" va permettre de récupérer la variable id globale ?

    - Pour Bovino STP, pourquoi il faut déclarer de nouveau la fonction "cacheMenu()" en fonction dans le Timout, je croyais que le setTimeout() prenait déjà en 1er paramètre une fonction... ?

    merci.

    A+

  5. #5
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Les deux réponses sont liées.
    je croyais que le setTimeout() prenait déjà en 1er paramètre une fonction... ?
    Non, pas tout à fait.
    Le premier paramètre est soit une chaîne de caractères qui sera ensuite évaluée (méthode eval()) et dans ce cas, l'argument que tu lui passes ne sera pas considéré comme la variable id mais comme la chaîne "id", d'où l'erreur et la proposition de herfrayg, soit une fonction, qui elle appellera ta fonction cacheMenu avec son paramètre (déclaré comme étant la variable id), c'est la solution que je t'ai proposée.

    A priori, ma solution est préférable en termes de performances et de qualité de code dans la mesure où eval() et ses dérivés sont considérés comme étant à éviter.
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Ok
    Salut,
    L'explication me va très bien. J'ai saisis maintenant.

    merci encore à vous 2.

    cdt.

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

Discussions similaires

  1. fonction animate pour menu deroulant
    Par willyg28 dans le forum jQuery
    Réponses: 4
    Dernier message: 11/04/2012, 09h09
  2. probleme de code en css pour menu deroulant
    Par gaya102 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 02/03/2009, 18h08
  3. acces a plage de donnee pour menu deroulant
    Par cicdrek dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/08/2007, 11h46
  4. [MySQL] besoin d'aide pour menu deroulant a 3 niveaux
    Par fast462 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/05/2007, 09h46
  5. Intégration Javascript pour menu deroulant CSS compatible IE
    Par Dantahoua dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/08/2005, 20h41

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