Variable global

Signaler
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012
-
 @karamel -
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

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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         
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Oui mais là sa marche plus, car il n'accede pas à mon objet !!!

Have Fun ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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         
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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         
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

this.elmt. n'est pas important this.elmt. = document.getElementByID("toto") ...

Have Fun ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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       
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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         
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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        
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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
Messages postés
626
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
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.
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>> 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         
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
message perdu corps et bien !
pour setTiemout :setTimeout( function() { fonction à appeler( paramètre , tmp ou autres ); }, délai );
          [mon Site] [M'écrire]  Bul         
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

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 ...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>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