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

AJAX Discussion :

[AJAX] Utilisation des closures


Sujet :

AJAX

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut [AJAX] Utilisation des closures
    Bonjour,
    J'ai un probleme avec une closure
    pas de message d'erreur à part que l'element du DOM via elementGetById n'est pas défini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     function objetEnglobant() {
                        var that = this;
                        this.nom = 'Hubert';
                        this.englobe = function() {
                            return (function() {alert(that.nom);});
                        }
                    }
                    var obj = new objetEnglobant;//j'ai essayé avec  new objetEnglobant();
                    document.getElementById('clic3').onclick = obj.englobe()
    Ce code vient de ce tutoriel http://lti.epfl.ch/Documents/ObjetsJavascript.html
    Ou se situe le probleme Merci ?

  2. #2
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    Salut

    Tu as la reponse dans ta question je crois :

    il faut placer un id 'clic3' dans ta page.

    comme ça il sera trouvé, this sera défini et ainsi de suite.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    Désolé,j'aurais du mettre tout mon code :le voici
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <script type="text/javascript">
    function objetEnglobant() {
                        var that = this;
                        this.nom = 'Hubert';
                        this.englobe = function() {
                            return (function() {alert(that.nom);});
                        }
                    }
                    var obj = new objetEnglobant;
                    document.getElementById('clic3').onclick = obj.englobe();
     
    </head>
    <body><div id="clic3">lien</div></body>
    </html>
    Voilà

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    au moment où il y est fait référence, "clic3" n'existe pas encore.
    Il faut appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('clic3').onclick = obj.englobe();
    dans le onload du <body>.

    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 : 55
    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
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('clic3').onclick = obj.englobe()
    en faisant comme ça, tu affectes au onclick le résultat de l'exécution de la fonction.
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('clic3').onclick = obj.englobe
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('clic3').onclick = function(){obj.englobe()}
    qu'il faut faire
    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 éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    Merci à vous 2 effectivement il faut passer par le onload
    Merci trop bien les fermetures
    en plus c'est une erreur ,que j'ai souvent..

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    comment dois je faire si au lieu d'afficher that.nom je veux le récupérer
    suite à window.onload=obj.englobe();?
    Merci

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par laurentg2003 Voir le message
    comment dois je faire si au lieu d'afficher that.nom je veux le récupérer
    Ben tu le mets à droite d'un signe d'affectation et, à gauche, le nom d'une variable ou la référence à la value d'un objet de la page

    A+

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    return(function() { return that.nom;ou var= that.nom});
    quand je fais alert(obj.englobe()) ça m'affiche la fonction .....

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    this.englobe = function() {
       var taVariable = that.nom;
       alert(taVariable);
    }
    Pour la réutiliser ailleurs il suffit que taVariable soit déclarée en globale

    A+

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Par défaut
    oui,je savais ça en gros la closure ne sert à rien

    merci

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par laurentg2003 Voir le message
    oui,je savais ça en gros la closure ne sert à rien
    Ben ici non puisque c'est du temps réel (encore une fois : sauf si j'ai pas compris) : tu cliques => tu récupères la valeur => tu l'utilises

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/10/2017, 10h13
  2. Utilisation des fonctionnalités AJAX dans un projet web
    Par stefsas dans le forum ASP.NET Ajax
    Réponses: 5
    Dernier message: 08/04/2010, 08h19
  3. Réponses: 3
    Dernier message: 30/10/2007, 10h09
  4. [AJAX] Utilisation des quotes
    Par illegalsene dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/10/2006, 09h23
  5. Utilisation des liste liées (ajax) avec du perl
    Par Jim_Nastiq dans le forum Web
    Réponses: 1
    Dernier message: 12/07/2006, 12h07

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