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 :

erreur dans une fonction javascript toute simple


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut erreur dans une fonction javascript toute simple
    Bonjour, j'ai un problème avec une fonction javascript simple dont voici le code source :

    Code html : 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
    18
    19
    20
    21
    22
    <html> 
    <head> 
    </head> 
    <body> 
     
    <span id='monId' onClick='annoncerMonId(id);'>Bonjour</span> 
     
    <script language='javascript'> 
     
    function annoncerMonId(id) 
    { 
    alert(id); 
    setTimeout("annoncerEncoreMonId(id)",1000); 
    } 
     
    function annoncerEncoreMonId(id) 
    {alert(id);} 
     
    </script> 
     
    </body> 
    </html>

    Le but de la fonction est que lorsque je clique sur la phrase Bonjour,
    et bien ça fait appel à la fonction annoncerMonId() qui m'affiche l'id dans une boite d'alerte : ça marche nickel.
    Puis toujours dans cette méme fonction, il y aussi appel par un setTimeout à l'autre fonction annoncerEncoreMonId() pour afficher une 2ème fois l'id : là ça ne marche pas.

    Pouvez-vous me dire pourquoi ça ne marche pas ? Merci d'avance

    PS : je sais que dans la fonction annoncerMonId() je pouvait mettre setTimeout("alert(id)",1000); au lieu de setTimeout("annoncerEncoreMonId(id)",1000); mais je ne l'ai pas mis car le but est de voir si une variable peut se transmettre d'une fonction à l'autre.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 105
    Points : 119
    Points
    119
    Par défaut
    Salut,

    essaye avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout((function(id){return function(){annoncerEncoreMonId(id)}})(id),1000);
    dans ce cas, il faut utiliser les closures !

  3. #3
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    Merci beaucoup ça marche nickel.

    C'est dommage que la transmission de variable par un setTimeout n'est pas aussi simple.

    Merci encore, mais peut tu me dire c'est quoi les closures ? merci

    Et j'ai oublié de te demander une chose si ça ne te dérange pas :
    peut tu m'expliquer en détail le bout de code que tu m'as donnée ?

    Merci

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 105
    Points : 119
    Points
    119
    Par défaut
    Les explications c'est pas toujours mon fort mais je vais essayer:

    en gros, si tu veux executer une fonction directement, sans nom (donc une fonction anonyme), tu ecris
    les parenthèses permettent d'executer directement la fonction.
    Si tu veux passer des parametres a cette fonction anonyme, tu ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (function(chaine){alert(chaine);})("toto")
    Ca affichera toto.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (function(id){
       return function(){
          annoncerEncoreMonId(id)
       }
    })(id)
    Donc la, tu peux comprendre que l'on fait appel a une fonction anonyme, dont on inclut en parametre "id".
    Cette fonction retourne l'appel de fonction "annoncerEncoreMonId(id)"; avec la bonne valeur de "id".

    J'espere t'avoir eclairé malgré mes explications tres floues

  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 : 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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut,
    tu peux aussi faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function(){annoncerEncoreMonId(id)},1000);

  6. #6
    Invité
    Invité(e)
    Par défaut
    jour

    comme ca aussi ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("annoncerEncoreMonId('"+id+"')",1000);

Discussions similaires

  1. Erreur dans une fonction javascript
    Par nicotom dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/01/2009, 23h08
  2. créer un type dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/07/2005, 13h54
  3. créer un type hidden dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2005, 12h17
  4. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58
  5. Réponses: 2
    Dernier message: 11/08/2004, 15h01

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