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 dans une fonction anonyme


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 39
    Points : 40
    Points
    40
    Par défaut Fonction dans une fonction anonyme
    J'aurais besoin d'aide pour accéder à une variable ou une fonction qui se trouve dans une fonction anonyme.

    Voici le code semblable à ma page :

    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
    18
    19
     
    <html>
    <head>
    <script>
    (function() {
    	var t = 0;
    	function Count() {
    		t++;
    		window.setTimeout(Count, 2000);
    	}
    	window.setTimeout(Count, 2000);
    })();
     
    </script>
    </head>
    <body>
    <input type="button" onclick="Count();" />
    </body>
    </html>
    Et donc, comme le code le montre, je voudrais pouvoir lancer la fonction Count par un bouton, mais comme la fonction Count est dans la fonction anonyme, je ne peux pas y accéder aussi facilement.

    J'ai voulu parcourir l'ensemble des fonctions de la page mais impossible de trouver l'objet en question.

    Je vous remercie d'avance pour votre aide.

    PS : Pas besoin de me répondre qu'il suffit de sortir la fonction Count de la fonction anonyme, le code doit être implanté de cette façon là.

  2. #2
    Membre actif Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Points : 226
    Points
    226
    Par défaut
    bah utilise javascript pour attacher ton évènement, au passage ça sera plus pertinent vu comment tu fais ça.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 39
    Points : 40
    Points
    40
    Par défaut
    Ben disons que moi je fais rien.

    On m'a donné ce code, je ne peux pas le modifier, je dois jute ajouter un bouton pour pouvoir accéder à la fonction.

    Je rappelle que j'ai volontairement simplifié la page pour montrer ce que j'ai besoin de faire, en réalité, la fonction anonyme est beaucoup plus complexe.

    Il faut donc partir du principe que je ne peux rien changer, il faut juste que je lance une fonction au click sur le bouton, et dans cette fonction je dois trouver une méthode pour pouvoir accéder part un moyen ou un autre d'incrémenter la variable "t". Soit en exécutant de manière volontaire la fonction Count, ou en accédant directement à la variable "t".

    Au passage, j'ai un peu de mal à te suivre quand tu parles "d'attacher mon évènement"...

    Merci pour ton aide en tout cas

  4. #4
    Membre actif Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Points : 226
    Points
    226
    Par défaut
    j'ai le regret de te dire qu'avec ce code et si tu ne peux pas changer le javascript contenu dans cette fonction : tu est niqué.

    C'est une construction pour éviter que des variables globales ne trainent, si c'est pas global, tu peux pas y acceder en rajoutant un paramètre dans un attribut onclick.

    une solution aurait été :
    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
    23
    24
    25
     
    <html>
    <head>
    <script>
    (function() {
            var t = 0;
            function Count() {
                    t++;
                    window.setTimeout(Count, 2000);
            }
            window.setTimeout(Count, 2000);
     
            var button = document.createElement("button");
            button.type="button";
            button.onclick = Count;
            button.innerHTML = "click";
            document.body.appendChild(button);
    })();
     
    </script>
    </head>
    <body>
     
    </body>
    </html>

  5. #5
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Tu peux peut être changer ton code pour ca (en rouge, le code ajouté):
    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
    18
    19
    <script>
    var objet = (function() {
    	var t = 0;
    	function Count() {
    		t++;
    		window.setTimeout(Count, 2000);
    	}
    	window.setTimeout(Count, 2000);
            return {
               runCount : function() {
                 Count();
               }
            };
    })();
    
    </script>
    
    <input type="button" onclick="objet.runCount();" />
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 39
    Points : 40
    Points
    40
    Par défaut
    Nikel merci !

    C'est juste ce que je voulais savoir, si c'était possible ou pas, j'ai tellement cherché que je me demandais si en fait c'était vraiment possible.

    Mais comme en informatique tout est possible, j'ai préféré demander

    Finalement tout n'est pas possible ! Bref, on va jeter la librairie qu'on a et tout recommencer, du coup je vais garder vos bouts de code, ça pourra me servir, merci beaucoup

  7. #7
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Question !!!

    Pourquoi vouloir impérativement passer par une fonction anonyme ??
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 39
    Points : 40
    Points
    40
    Par défaut
    Ben vu que ça n'a pas l'air possible de faire ce que je veux, je vais devoir refaire cette partie et donc je ne ferais pas de fonction anonyme afin de le refaire propre.

    Mais vu la tête de la fonction en réalité, ça m'aurait pris beaucoup moins de temps si j'avais pu parcourir les objets de la page et retrouver d'une manière ou d'une autre la fonction Count.

    J'ai fait des essais en faisant des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i in window) {
      if (typeof window[i] == 'function') {
        alert(i);
      }
    }
    mais je trouve rien correspondant à Count. Alors je me suis demandé si y'avais pas un autre moyen de le trouver ce Count en cherchant peut être plus en profondeur dans window...

    Mais visiblement pas de solution... Dommage.

  9. #9
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    le but final ???
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Response.Redirect dans une fonction dans une classe
    Par jpower dans le forum ASP.NET
    Réponses: 14
    Dernier message: 24/08/2007, 09h45
  3. Appeler une fonction dans une fonction
    Par bryanstaubin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2007, 09h39
  4. Import d'une fonction, dans une fonction
    Par Goupo dans le forum Général Python
    Réponses: 2
    Dernier message: 12/01/2007, 16h50
  5. [PHP-JS] une fonction dans une fonction
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2006, 19h14

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