IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

proprieté d'une classe 'undefined'


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut proprieté d'une classe 'undefined'
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    // 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;
    }

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    dans ton timer, il serait peut-être bon de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    queryInfos.prototype.mouseStop
    par

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    Essaie plutot ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "queryInfos.prototype.mouseStop(" + this.coordX + ", " + this.coordY + ")"
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "queryInfos.prototype.mouseStop(this.coordX, this.coordY)"
    Dans ton setTimeout.

    A+

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ou encore ne pas passer d'arguments et récupérer directement
    this.coordX et this.coordY dans la méthode mouseStop

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    javaTwister :
    - du coté de "queryInfos.prototype.mouseStop", y'a pas de problème, ça marche comme ça (erreur si je change par "queryInfos.mouseStop")
    - et si tu regarde j'essaie deja d'acceder directement à this.coordX dans mouseStop... sans succès, il est justement la le problème

    KiLVaiDeN :
    - j'ai essayé ta methode, mais dès que je bouge la souris au dessus du div le alert apparait tout de suite (delay non respecté), et au moindre mouvement de souris une autre s'ajoute par dessus...

    Non mais ce que j'aimerais faire c'est accèder directement à this.coordX dans mouseStop : jcomprends juste pas pourquoi elle est undefined dans cette fonction. Passer les argument dans mon setTimeout est la méthode de secours (et encore, elle est foireuse pour le moment...)

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    queryInfos.prototype.onmousemove
    je comprends mal: onmousemove est une méthode de la classe kaTool, c'est ça?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    oui, queryInfos.prototype.onmousemove est héritée de kaTool. Elle est appelée chaque fois que le souris bouge au dessus du div

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    et ça ne pose pas problème de nommer une méthode personnelle comme une méthode native?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    non aucun, elle est "personnelle" mais héritée grace à la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for (var p in kaTool.prototype){
            if (!queryInfos.prototype[p]){
                queryInfos.prototype[p]= kaTool.prototype[p];
            }
        }
    de ce coté je sais qu'il n'y pas de problème, je l'ai deja fait dans de nombreuse autres classes.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/11/2014, 19h44
  2. [Débutant] Binding de propriete comprenant une classe comme parametre
    Par Gualino dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/02/2014, 12h12
  3. Ajouter proprieté a une classe existante.
    Par GMibb dans le forum Général Python
    Réponses: 3
    Dernier message: 09/12/2010, 23h31
  4. For-in pour lister les proprietes d'une classe
    Par mihaispr dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 08/09/2009, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo