Variable global

abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 28 nov. 2008 à 12:47
 @karamel - 28 nov. 2008 à 20:30
Dans le code suivant, j'utilise une variable global (mythisExemple) pour accéder à mon objet sur l'evenement keypress. N'y aurait t'il pas une methode sans variable global ?

function exemple()
{
    this.load = function()
    {
        mythisExemple = this;
        this.elmt.addEvent('keypress', function(){mythisExemple.event()});
    }
    this.event = function()
    {
    }
}

Have Fun ...

26 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 12:55
bonjour,

mettre var ?
     var mythisExemple = this;
mais ce ne sera plus une variable globale     ;o)
( sans préjuger du reste ... )

Cordialement

          [mon Site] [M'écrire]  Bul         
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 12:59
Oui mais là sa marche plus, car il n'accede pas à mon objet !!!

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 13:03
certes... mais ce que tu nous montres ne fonctionne pas non plus !
this.elmt.addEvent....    et c'est quel objet elmt ?
si ton script fonctionnait, ça fonctionnerait
          [mon Site] [M'écrire] Bul         
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 13:06
ce que je veux dire, c'est qu'on n'a pas toutes les billes.
en théorie, on utilise un var... pour faire ça.
     [mon Site] [M'écrire] Bul         
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 13:07
this.elmt. n'est pas important this.elmt. = document.getElementByID("toto") ...

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 13:27
comment ça pas "important" ?
sinon c'est quel objet ? c'est de la génération spontanée ?
si elmt n'est = à rien, ça ne peut pas fonctionner !!!

>> this.elmt. = document.getElementByID("toto")
???
donc tu n'as qu'un seul objet ? toto ?
et à quoi ça peut bien servir alors de faire ce que tu fais ?
s'il y avait plusieurs objets ( toto, tata, titi... ) je comprendrais,
mais là...

          [mon Site] [M'écrire] Bul       
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 13:35
En fait ma question est général et pas spécifique à l'evenement ou à la balise. Par exemple toto peut être un input de type texte avec l'évenement keypress mais peut aussi très bien être un div avec l'event click. Le seul truc que je souhaite savoir, c'est si il y a une methode alternative pour passer la reference d'un objet.

Je vais quand même te faire un exemple:

<script>
function exemple()
{
    this.load = function()
    {
        mythisExemple = this;
        document.getElementById("toto").addEvent('keypress', function(){mythisExemple.event()});
    }
    this.event = function()
    {
    }
}
</script>
Have Fun ...
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 13:37
J'ai pensé à une methode mais sa ne marche pas :

function exemple()
{
    this.load = function()
    {
        document.getElementById("toto").mythisExemple = this;
        document.getElementById("toto").addEvent('keypress', function(){this.mythisExemple.event()});
    }
    this.event = function()
    {
    }
}

Have Fun ...
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 13:47
Sur cette exemple j'ai effectivement pas été claire car addEvent est une propriété de mootool.

function exemple()
{
    this.load = function()
    {
        mythisExemple = this;
        setTimeout ( "mythisExemple.event()", 500);   
    }
    this.event = function()
    {
    }
}

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 14:03
houla....    t'es pas un simple toi !

document.getElementById("toto").addEvent('keypress', function(){mythisExemple.event()});
              c'est quoi mythisExemple ? :  mythisExemple = this;    
              et ça voudrait/c'est censé, être quoi pour toi ?

>>En fait ma question est général et pas spécifique à l'evenement ou à la balise.
ben justement ! mettre document.getElementById("toto").addEvent('keypress'....
c'est lié à un évènement et à une balise bien spécifique !

tu veux affecter un évênement keypress ( si tu sais ce que c'est keypress,
qui n'est pas keyup ! ), à une balise ? ( POO ou pas )

          [mon Site] [M'écrire]  Bul         
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 14:18
mythisExemple  est une variable global pour accéder à mon object. Mais sa sert à rien de faire de l'object si on utilise des variable global. Je cherche donc une solution pour se passer de cette variable !!

Alors un autre exemple, comment accéder à this.lol ??

<script type="text/javascript">
function exemple()
{
    this.lol = "hi";
    this.load = function()
    {
        mythisExemple = this;
        document.getElementById("toto").onkeypress=this.event;
    }
    this.event = function(obj)
    {
        alert("this: " + this.lol + " :: mythisExemple: " + mythisExemple.lol);
    }
}
auto = new exemple();
auto.load();
</script>

Dans ce script tu peux voir que "hi" est retourné seulement par mythisExemple.lol et non par this.lol . C'est normal car this point sur la balise input et plus sur l'object exemple.

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 14:32
je ne comprend pas ton .lol !
il sert à quoi ?

je ne comprend d'ailleurs rien à ce que tu veux faire.....

un ch'tiot contre-exemple, qui nous aidera peut-être ?

<script type= "text/javascript">
function exemple()
{  this.load = function()
   {    this.elem=document.getElementById("toto");
        var tmp=this;
        this.elem.onkeyup= function()
        {        alert( tmp .elem.value); }
    }
}
var auto = new exemple();
auto.load();
</script>

mais encore une fois : this.elem=document.getElementById("toto"); ????
tout est totalement inutile !
met directement le onkeyup sur l'élement !!!
j'ai mis keyup, car avec keypress c'est avant "l'affichage"

          [mon Site] [M'écrire] Bul        
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 14:53
et si tu veux faire pour plusieurs champs ( sinon quel intérêt ? )

<script type="text/javascript">
function exemple(prm)
{  this.elem=document.getElementById(prm);
   this.load = function()
   {    var tmp=this;
        this.elem.onkeyup= function()
        {
        alert(tmp.elem.value);
        }
    }
}
var auto = new exemple("toto");    auto.load();
var autp = new exemple("titi");    autp.load();

</script>

 

par exemple !!!

[mon Site][M'écrire]Bul
0
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
28 nov. 2008 à 14:57
Salut,

Renseignes toi sur le "binding" des fonctions qui te permettra de répondre à ton besoin.
En gros, une fois ta fonction "bindée" (de ton onKeyUp), tu pourras utiliser le pointer "this" dans cette dernière.

Maintenant, tu peux également déclarer une variable comme te l'a indiqué Bul3.
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 15:21
Effectivement, la solution du var marche, mais je perds la structure de ma class enfin ce n'est pas très grave. Faut que je regarde le "binding" ça à l'air de correspondre à ce que je veux faire!!

Sinon même problématique mais avec un setTimeout??

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 15:31
>> mais je perds la structure de ma class
sur l'exemple que j'ai mis peut-être certes, 
mais rien ne t'empêche de la refaire !

quand au "binding", je t'avoue que je sais appliquer dans certaines circonstances,
mais que je ne possède pas le concept totalement pour toujours le faire !

XTremDuke devrait nous faire un ch'tiot topo la dessus,
ça aiderait pas mal de personnes
un ch'tiot topo pour vrais débutants, sinon je ne comprendrais que peu
  de choses, comme sur les autres tutos à ce propos

          [mon Site] [M'écrire]  Bul         
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 15:33
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 15:36
message perdu corps et bien !
pour setTiemout :setTimeout( function() { fonction à appeler( paramètre , tmp ou autres ); }, délai );
          [mon Site] [M'écrire]  Bul         
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
28 nov. 2008 à 15:41
Parfait, nikel, merci :p

On a fini par se comprendre. Bon je regarde le binding, mais c'est vrai que c'est un peu cassage de cervo !!!

Have Fun ...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
28 nov. 2008 à 15:50
>>On a fini par se comprendre.
c'est pas toujours simple ( surtout pour moi ! )
nickel si ça baigne

>>binding  c'est vrai que c'est un peu cassage de cervo !!!
au secours XTremDuke ;o))
qui, lui, a parfaitement pigé, et il va être capable de descendre
au niveau du commun des mortels pour qu'ils percutent eux aussi,
s'il a un peu de temps...

         [mon Site] [M'écrire] Bul         
0
Rejoignez-nous