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 :

javascript objet et onclick


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Par défaut javascript objet et onclick
    Salut,

    Voici mon problème : A l'intérieur d'une classe javascript, je cherche à assigner une méthode de cette classe sur l'onclick d'un div créé dynamiquement à l'intérieur de cette classe.

    Voici un exemple de code pour illustrer mon propos :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <title>TEST</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <style type="text/css">
        .BLOCACTIF{
            width:50px;
            height:20px;
            background-color:rgb(180,180,180);
            cursor:pointer;
        }
        .BLOCPASSIF{
            width:50px;
            height:20px;
            background-color:rgb(255,255,255);
        }
        </style>
        <script type="text/javascript">
     
        function bloc(){
     
            this.cpt=1;
     
            this.creerBloc=function(container){
     
                var oldBloc=document.getElementById(container);
     
                var bID="BLOC"+this.cpt;
                var newBloc=document.createElement("DIV");
                newBloc.innerHTML="bloc "+this.cpt;
                newBloc.id=bID;
                newBloc.className="BLOCACTIF";
                newBloc.onclick=function(){ this.creerBloc(bID);}; //ici appel à la methode creerBloc sur le nouveau div
     
                oldBloc.appendChild(newBloc);
                oldBloc.className="BLOCPASSIF";
                oldBloc.onclick=function(){ return;};
                this.cpt++;
     
            }
     
        }
     
        var testBloc=new bloc();
     
        </script>
    </head>
    <body onLoad="testBloc.creerBloc('BLOC')">
         <div id="BLOC">
        </div>
    </body>
    </html>
    Lorsque je clique sur le div créé, la console d'erreur me renvoit : this.creerBloc is not a function.

    A contrario la même chose réalisée d'une façon procédurale ne pose pas de problème

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <title>TEST</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <style type="text/css">
        .BLOCACTIF{
            width:50px;
            height:20px;
            background-color:rgb(180,180,180);
            cursor:pointer;
        }
        .BLOCPASSIF{
            width:50px;
            height:20px;
            background-color:rgb(255,255,255);
        }
        </style>
        <script type="text/javascript">
        var cpt=1;
     
        function creerBloc(container){
     
            var oldBloc=document.getElementById(container);
     
            var bID="BLOC"+cpt;
            var newBloc=document.createElement("DIV");
            newBloc.innerHTML="bloc "+cpt;
            newBloc.id=bID;
            newBloc.className="BLOCACTIF";
            newBloc.onclick=function(){ creerBloc(bID);};
     
            oldBloc.appendChild(newBloc);
            oldBloc.className="BLOCPASSIF";
            oldBloc.onclick=function(){ return;};
            cpt++;
     
        }
     
        </script>
    </head>
    <body onLoad="creerBloc('BLOC')">
         <div id="BLOC">
        </div>
    </body>
    </html>

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    hello,

    erreur classique d'utilisation de this. tu n'es pas dans le bon contexte donc ça n'a pas l'effet escompté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newBloc.onclick=function(){ this.creerBloc(bID);};
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var obj = this;
    newBloc.onclick=function(){ obj.creerBloc(bID);};

  3. #3
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    C'est un problème de contexte, this fait référence au div et non à bloc.
    La correction :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <title>TEST</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <style type="text/css">
        .BLOCACTIF{
            width:50px;
            height:20px;
            background-color:rgb(180,180,180);
            cursor:pointer;
        }
        .BLOCPASSIF{
            width:50px;
            height:20px;
            background-color:rgb(255,255,255);
        }
        </style>
        <script type="text/javascript">
     
        function bloc(){
     
            this.cpt=1;
     
            this.creerBloc=function(container){
                var me = this;
                var oldBloc=document.getElementById(container);
                var bID="BLOC"+this.cpt;
                var newBloc=document.createElement("DIV");
                newBloc.innerHTML="bloc "+this.cpt;
                newBloc.id=bID;
                newBloc.className="BLOCACTIF";
                newBloc.onclick=function(){ alert(this);me.creerBloc(bID);}; //ici appel à la methode creerBloc sur le nouveau div
     
                oldBloc.appendChild(newBloc);
                oldBloc.className="BLOCPASSIF";
                oldBloc.onclick=function(){ return;};
                this.cpt++;
     
            }
     
        }
     
        var testBloc=new bloc();
     
        </script>
    </head>
    <body onLoad="testBloc.creerBloc('BLOC')">
         <div id="BLOC">
        </div>
    </body>
    </html>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Par défaut
    Super, merci beaucoup !!!

    Je ne suis pas surpris, je me doutais bien qu'il y avait un problème de contexte, mais je ne voyais pas du tout comment le résoudre, votre réponse va vraiment bien m'aider.

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

Discussions similaires

  1. JavaScript objet (conserver référence)
    Par BRAUKRIS dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2007, 14h51
  2. [javascript] objet string + comparaison
    Par herve70 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/11/2006, 16h19
  3. javascript derrière un onclick sur bouton radio
    Par lodan dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/08/2006, 18h03
  4. Réponses: 6
    Dernier message: 21/07/2006, 15h48
  5. Faire apelle a une fonction javascript depuis un onclick=&am
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/12/2005, 21h41

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