Proprieté d'une classe 'undefined'

seb_oulba Messages postés 8 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 8 septembre 2006 - 31 août 2006 à 09:38
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 6 sept. 2006 à 13:19
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

cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
31 août 2006 à 10:23
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
0
seb_oulba Messages postés 8 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 8 septembre 2006
31 août 2006 à 10:54
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.
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
31 août 2006 à 11:15
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
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
1 sept. 2006 à 11:48
une question "similaire" où PetOleteam donne
   une bonne adresse pour quelques explications
   supplémentaires : Forum
<hr />
cordialement   Bul  Site  M'écrire
0

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

Posez votre question
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 sept. 2006 à 12:33
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
0
seb_oulba Messages postés 8 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 8 septembre 2006
6 sept. 2006 à 12:49
Oui c'est résolu, c'etait du a setTimeout.
Regardez ici : http://www.developpez.net/forums/showthread.php?t=204139
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 sept. 2006 à 13:18
c'est exactement ce que je proposais sur le lien donné.
pas du au setTimeout mais au "this".
<hr />
cordialement   Bul    Site    M'écrire
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 sept. 2006 à 13:19
et nickel si ça baigne...
<hr />
cordialement   Bul    Site    M'écrire
0