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 :

[POO] Objet en JavaScript


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    Avril 2002
    Messages
    224
    D�tails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Par d�faut [POO] Objet en JavaScript
    Bonjour,

    Je rencontre un probl�me sur la cr�ation d'un objet perso "popup". Plus pr�cisement, j'ai cr�� un objet(code ci-dessous) et je n'arrive pas � partager mes variables dans la totalit� des m�thodes de mon objet. Exemple, mon objet poss�de une variable "url" cr�er dans mon constructeur. J'arrive � l'utiliser dans mes "getters" ainsi que dans ma m�thode "createPopup()" mais impossible de la r�cup�rer dans mes autres m�thodes(boutonPresse(); boutonRelache etc...). Question: pourquoi les variables d�finies dans mon constructeurs ne sont-elles pas visibles dans toute mes m�thodes? Merci

    /* Constructeur */
    function Popup(title,url,x,y,w,h) {
    //Attributs
    this.title = title;
    this.url = url;
    this.x = x; //Position du popup
    this.y = y;
    this.xMouse = 0; //Position de la souris
    this.yMouse = 0;
    this.origine_x; //Deplacement
    this.origine_y;
    this.w = w;
    this.h = h;
    this.clicEnCours = false;
    this.createPopup();
    }

    /* Methods Getters */
    Popup.prototype.getTitle = function() {
    return this.title ;
    }
    Popup.prototype.getX = function() {
    return this.x;
    }
    Popup.prototype.getY = function() {
    return this.y;
    }
    Popup.prototype.getW = function() {
    return this.w;
    }
    Popup.prototype.getH = function() {
    return this.h;
    }

    /* */
    Popup.prototype.createPopup = function() {
    //A) Creer une div en position absolute
    var div = document.createElement("div");
    div.id = "popup";
    div.style.position = "absolute";
    div.style.width = this.w;
    div.style.height = this.h;
    div.style.top = this.y;
    div.style.left = this.x;
    div.style.background = "red";
    //B) Creer le titre de la popup
    var title = document.createElement("div");
    var textNode = document.createTextNode(this.title);
    title.style.background = "gray";
    //C) Creer l'Iframe
    var iframe = document.createElement("iframe");
    iframe.src = this.url;
    iframe.style.width = "100%";
    iframe.style.height = "100%";
    //D) Ajout des elements dans la page courante
    title.appendChild(textNode);
    div.appendChild(title);
    div.appendChild(iframe);
    document.body.appendChild(div);
    alert(this.title);
    //E) Gestion des evenements
    document.body.onmousemove = this.position;
    title.onmousedown = this.boutonPresse;
    title.onmouseup = this.boutonRelache;
    }

    Popup.prototype.boutonPresse = function (){

    this.origine_x = this.xMouse - this.x;
    this.origine_y = this.yMouse - this.y;
    this.clicEnCours = true;
    }

    Popup.prototype.boutonRelache = function ()
    {
    this.origine_x = this.x - this.xMouse;
    this.origine_y = this.y - this.yMouse;
    this.clicEnCours = false;
    }

    Popup.prototype.position = function (e) {

    this.xMouse = event.x + document.body.scrollLeft;
    this.yMouse = event.y + document.body.scrollTop;
    //Deplacement si clickEnCours
    if (this.clicEnCours)
    {
    this.xMouse = this.x - this.origine_x;
    this.yMouse = this.y - this.origine_y;
    document.getElementById("popup").style.left = this.xMouse;
    document.getElementById("popup").style.top = this.yMouse;
    }

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    D�tails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Par d�faut
    J'avais le m�me probl�me.
    C'est � cause de cette ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
         title.onmousedown = this.boutonPresse;
    Ce qui revient � faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
         title.onmousedown = function (){
     
       this.origine_x = this.xMouse - this.x;
       this.origine_y = this.yMouse - this.y;
       this.clicEnCours = true;
     };
    Mais sans la r�f�rence � ton Objet. Enfin je crois , et je n'ai jamais trouv� de solution

  3. #3
    Membre exp�riment� Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par d�faut
    Le code m'a l'aire tout bon
    j'utilise les "objets" JS autant que ce peux.
    eut �tre un probl�me d'appel?
    A tout hazard, les objet sont bien cr�er sous la forme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    var objMaPopup = new Popup(title,url,x,y,w,h);

  4. #4
    Membre �clair�
    Inscrit en
    Avril 2002
    Messages
    224
    D�tails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Par d�faut
    Bon avant tout, merci pour vos r�ponses pr�cieuses.
    Effectivement je suis arriv� � la m�me conclusion, c'est la ligne "title.onmousedown = this.boutonPresse; " qui me pose un probl�me. Effectivement cette ligne n'est pas un appel classique d'une m�thode mais plut�t l'association d'une m�thode � un attribut(ou un truc de ce genre).
    En ce qui concerne l'instanciation de mon objet il est bien de la forme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    onclick="javascript:var popup = new Popup('popupAddAssociation','popupAddAssociation.do','200px','200px','650px','400px');
    J'esp�re qu'un petit g�nie va pouvoir nous renseigner En attendant, je veux bien un exemple de ta m�thode interm�diare "systemofaxav".

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 31
    Par d�faut
    Je vous recommande la lecture de cet article concernant l'utilisation de this dans des �v�nements. En gros, comme systemofaxav l'a fait remarquer, il s'agit de savoir si tu copies ta fonction ou si tu fais une r�f�rence � celle-ci. Si tu la copies, ton this se r�f�re � l'�l�ment ayant d�clench� l'�l�ment ; si tu la passes par r�f�rence, ton this devrait se r�f�rer � l'objet PopUp, comme on s'y attend.

    D'apr�s ledit article, les codes suivants font des copies de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    element.onclick = doSomething
    element.addEventListener('click',doSomething,false) // Existe partout sauf sous IE
    element.onclick = function () {this.style.color = '#cc0000';}
    <element onclick="this.style.color = '#cc0000';">
    Mais ceux l� font une r�f�rence (ce que tu souhaites, � priori) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    element.onclick = function () {doSomething()}
    element.attachEvent('onclick',doSomething) // Existe seulement sous IE
    <element onclick="doSomething()">
    Comme tu vois, c'est assez sioux. Cela dit �a nous avance pas des masses, parce que si tu fais quelque chose dans ce genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    document.body.onmousemove = function() { this.position };
    Si tu fais quelque chose comme le code ci-dessus, ta fonction sera quand m�me copi�e, et pas r�f�renc�e. L'autre solution c'est d'enregistrer tout tes �v�nements en inline dans le XHTMl, mais ce n'est �videmment ni �l�gant ni pratique.

    Bref, je t'avance pas vraiment, mais j'esp�re que �a t'�claire un peu.

    EDIT : Il semble que dans le cas d'un r�f�rencement de la fonction, this se r�f�re � l'objet window courant... et donc pas � ton PopUp. Dans ce cas l'enregistrement d'�v�nements vers un objet serait impossible ?!? Il doit exister un workaround astucieux...

  6. #6
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    Euh... je sais pas si ca peut aider, mais j'ai r�cement fait un projet qui me semble semblable.

    Allez regarder, c'est dans Page Source...
    Peut-�tre que vous y trouverai votre bonheur et/ou la solution � votre pb !

    Bonne chance d'avance

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [POO] objet Java en param�tre d'une fonction Javascript
    Par bastouffe dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 17/09/2008, 16h55
  2. [POO] Probl�me de javascript objet
    Par T-nor dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 20/07/2007, 12h00
  3. [POO] cr��er un objet en javascript
    Par bulatovic dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 14/03/2007, 19h31
  4. [POO] objet javascript et html
    Par jakouz dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 20/04/2006, 17h58

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