Problème de Onclick

Signaler
Messages postés
209
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
9 février 2012
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour,

Voici ma petite fonction qui créer un tableau dans une div en javascript avec un lien qui cache cette div mais cela ne fonctionne pas.

Un code vaut mieux que des longs discours donc voila :

WinTab = {
    ,height:300
    ,create:function(elmt) {
        this.elmtbox=document.getElementById(elmt);

        var oTbl = document.createElement('Table');
        oTbl.style.height = this.height+'px';

        var oTR = oTbl.insertRow(0);
        var oTD= oTR.insertCell(0);
            var oAButton = document.createElement('a');
            oAButton.href='javascript:void(0);';
            oAButton.title='Close';
            oAButton.innerHTML='Close';
            oAButton.onclick = this.close;
            oTD.appendChild(oAButton);
oTR.appendChild(oTD);
oTbl.appendChild(oTR);

        this.elmtbox.appendChild(oTbl);
        this.elmtbox.style.height=this.height+'px';
    },show:function() {
        this.elmtbox.style.display='';
    },close:function() {
        alert('close'+this.elmtbox);
        this.elmtbox.style.display='none';
    }
}

Voici le code qui lance le code :
function test() {
    WinBox.create('divtest');
    WinBox.show();
}

Le seul problème est que lorsque je clic sur le lien cela me dit que this.elmtbox est inconnue.

Qq serait pq ??

Merci d'avance,

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net

1 réponse

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
il s'agit d'un problème avec this, qui représente l'objet en cours...

ta
fonction
show:function() {
this.elmtbox.style.display= '';}
est appelée à partir de WinBox.show(); donc this vaut WinBox d'ou pas de problème this.elmtbox est défini.

ta fonction
close:function() {
this.elmtbox.style.display ='none';}
et appelée à partir du
onclick sur le lien, donc le this au
moment de l'éxecution représente l'objet balise A,
dans ce cas this.elmtbox
est indéfini.

Rajoutes dans ta fonction create la ligne suivante

oAButton.elmtbox =
this.elmtbox;
de la sorte l'objet oAButton aura également son this.elmtbox qui sera le même que celui de WinBox.

Dans ce cas
quelque soit la méthode d'appel de la fonction close cela fonctionnera.
Pas sûr d'être clair !!!
;O)