Proprieté d'une classe 'undefined'

Messages postés
8
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
8 septembre 2006
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
hello,

je développe un petit outil pour ka-map (exemple ici : http://maps.dmsolutions.ca/demo/us_streets/iframe.html)afin
de faire des requetes lorsque ma souris s'arrete au dessus d'un point
un certain temps. Le problème se situe dans la fonction mouseStop : le
"alert(this.coordX)" me renvoie "undefined", tout comme "alert(x)".
Pourtant en testant dans la fonction mouseMove avec un
"alert(this.coordX)" (en bougeant un minimum la souris au dessus du
div...), j'ai quelque chose de valable.

Quelqu'un saurait ou se trouve le problème ? merci

// A tool allowing to get info of point interests under
// mouse cursor on mouse stop
var queryInfos = function(oKaMap, szID, delay) {
    this.kaMap = oKaMap;
    this.name = 'queryInfos';
    this.chrono = null;
    this.coordX = "";
    this.coordY = "";
    this.delay = delay;
    this.mouseStopped = false;
    this.bInfoTool = true;
    this.mouseStopped = false;

    // héritage des mouse functions de kaTool
    for (var p in kaTool.prototype){
        if (!queryInfos.prototype[p]){
            queryInfos.prototype[p]= kaTool.prototype[p];
        }
    }
}

queryInfos.prototype.onmousemove = function(e){
if (navigator.appName!="Microsoft Internet Explorer"){
this.coordX = e.pageX;
this.coordY = e.pageY;
}
else if(document.documentElement.clientWidth > 0){
this.coordX = event.x+document.documentElement.scrollLeft;
this.coordY = event.y+document.documentElement.scrollTop;
}
else{
this.coordX = event.offsetX;
this.coordY = event.offsetY;
}

if(this.chrono != null){
clearTimeout(this.chrono); //reset du chrono
}

var adjCoords = this.adjustPixPosition(this.coordX, this.coordY);
var p = this.kaMap.pixToGeo(adjCoords[0], adjCoords[1]); 
this.coordX = p[0];
this.coordY = p[1];

        //ici "alert(this.coordX)" me renvoie une coordonnée valable

if(this.mouseStopped == false){
this.chrono = setTimeout("queryInfos.prototype.mouseStop(this.coordX, this.coordY)", this.delay);
}
}

queryInfos.prototype.mouseStop = function(x,y){
alert(x);  // renvoie undefined
alert(this.coordX);  // renvoie undefined
clearTimeout(this.chrono);
this.mouseStopped = true;
//this.callFct(x,y);
this.mouseStopped = false;
}

8 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
hello,

 this.chrono=setTimeout( function() { mouseStop(this.coordX,this.coordY); }, this.delay ); 
      à la place de
 this.chrono = setTimeout("queryInfos.prototype.mouseStop(this.coordX, this.coordY)"
      peut-être ?

l'adresse donné ne mène à rien ( dur à voir )
si  on copie le script donné vers un éditeur : 1 seule ligne ( dur à lire )










<hr />





cordialement   Bul   
Site
   
M'écrire
Messages postés
8
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
8 septembre 2006

Salut bultez,
j'ai tenté ta proposition, en la modifiant un peu (ne fonctionnait pas sans cette modif : "mouseStop is not a function") :



this.chrono=setTimeout( function() { queryInfos.prototype.mouseStop(this.coordX,this.coordY); }, this.delay );

mais "alert(x)" donne toujours undefined dans mouseStop :-(

Quant au lien et à la copie du script, je sais pas ce qui se passe chez toi, mais j'ai aucun problème pour ouvrir de mon côté. A noter que le lien n'est pas le projet sur lequel je bosse, c'est juste pour montrer ce qu'est ka-map.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
pour poster un script ici sans souci,
le mieux : passer par un éditeur de texte.

quand à notre problème, pour passer des paramètres dans une fonction
appelée par setTimeout, c'est la formule appropriée
[ on peut faire aussi setTimeout("fonction("+var1+","+var2+")",délai)
   mais je me perd toujours dans les ", les +...  ]
si on fait setTimeout("fonction(var1,var2);",délai)
ça baigne pas ! var1 et var2 sont du string.

pour l'appel des fonction j'use "toujours" de :

function

fonction de base(...


function fonction de base.prototype.sous fonction 1(....

et appel par   this.sous fonction 1()

pas de raison que çà colle pas.
<hr />
cordialement   Bul   
Site
   
M'écrire
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
une question "similaire" où PetOleteam donne
   une bonne adresse pour quelques explications
   supplémentaires : Forum
<hr />
cordialement   Bul  Site  M'écrire
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
on ne sais pas si c'est résolu ? 
mais suite de la réponse ici
je ne retrouvais plus ce message !
<hr />
cordialement   Bul    Site    M'écrire
Messages postés
8
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
8 septembre 2006

Oui c'est résolu, c'etait du a setTimeout.
Regardez ici : http://www.developpez.net/forums/showthread.php?t=204139
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
c'est exactement ce que je proposais sur le lien donné.
pas du au setTimeout mais au "this".
<hr />
cordialement   Bul    Site    M'écrire
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
et nickel si ça baigne...
<hr />
cordialement   Bul    Site    M'écrire