Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1615 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Javascript] set handler dans une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Javascript] set handler dans une classe

n°1236668
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-11-2005 à 17:08:46  profilanswer
 

Alors voila j'ai cette classe javascript:

Code :
  1. function Test(){
  2.   this.newDiv = document.createElement('div');
  3.   //setting needed attribute for div
  4.   this.newDiv.setAttribute('id', 'div'+(++this.constructor.divMaxId));
  5.   //setting click handler on div with public method
  6.   this.newDiv.onmousedown=function(event) { publicGetId();}
  7.   //setting click handler on div with private method
  8.   this.newDiv.onmouseup=function(event) { privateGetId();}
  9.   //add text to node
  10.   this.newDiv.appendChild(document.createTextNode('div ayant pour id:'+this.constructor.divMaxId));
  11.   //add node to document
  12.   document.getElementById('divContainer').appendChild(this.newDiv);
  13.   // PRIVILEGED METHODS
  14.   this.privateGetId = function(){ alert(this.newDiv.getAttribute('id')); }
  15. }
  16. }
  17. // PUBLIC METHODS
  18. Test.prototype.publicGetId = function (){ alert(this.newDiv.getAttribute('id'));}
  19. // PROTOTYPE PROPERTY
  20. Test.divMaxId=0;  //max id of div


et cette page html pour tester:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <meta name="author" content="Me" />
  7.   <meta name="keywords" content="" />
  8.   <meta name="description" content="" />
  9.   <meta name="robots" content="all" />
  10.   <title>Maquette</title>
  11.   <script type="text/javascript" src="Test.js"></script>
  12.   <script type="text/javascript" >
  13.   function doIt(){
  14.     var a = new Test;
  15.   }
  16.   </script>
  17.   <style type="text/css" media="all">
  18.   div{
  19.     background-color: blue;
  20.     border: 1px solid black;
  21.   }
  22.   </style>
  23. </head>
  24. <body>
  25. <input type="button" onclick="doIt()" value="test"/>
  26. <div id="divContainer" style="border:0px;"> <!-- usefull for adding new div nodes --> </div>
  27. </body>
  28. </html>


 
La construction des objets Test se passe très bien.
Le problème se trouve sur les handlers que je rajoute sur chacun d'eux:

Code :
  1. ...
  2.   //setting click handler on div with public method
  3.   newDiv.onmousedown=function(event) { publicGetId();}
  4.   //setting click handler on div with public method
  5.   newDiv.onmouseup=function(event) { privateGetId();}
  6.   ...


 
Dans les deux cas ( et aussi bien sous FF que IE ) les fonctions ne sont pas connues.
Je pense savoir pourquoi: les deux fonctions publicGetId et privateGetId ne sont connues que des objets Test. Or elles sont appelées par un click sur le div crée et non sur mon objet, donc ... ça marche pô!!!
 
D'ou ma question: Y a-t-il un moyen d'appeler des fonctions de ma classe dans ces handlers ou dois-je obligatoirement déclarer ces fonctions en dehors de ma classe ( ce qui ne me plairait pas trop)?
 
D'avance merci!
 
[edit: commentaires ajoutés]


Message édité par anapajari le 02-11-2005 à 17:45:31
mood
Publicité
Posté le 02-11-2005 à 17:08:46  profilanswer
 

n°1236745
fxoxo
Posté le 02-11-2005 à 18:29:50  profilanswer
 

Bonjour,
Normallement, il n'y a pas de problèmes pour utiliser les handlers dans un objet ...
Essaye de faire l'assignation de l'handler après avoir ajouté le noeud au document (this.newDiv.onmousedown=function(event) { publicGetId();} après  
document.getElementById('divContainer').appendChild(this.newDiv); )
 
sinon, avec cette méthode, tu risque de ne pas récupérer l'event, voici un exemple de ce que j'utilise:

Code :
  1. this._inputField.onkeyup=function(){getKeyEvent(event)};//pour IE
  2. this._inputField.onkeyup=function(e){getKeyEvent(e)};//Pour Gecko


 
Sinon, va faire un tour dans sur le site http://www.quirksmode.org/ rubrique Javascript/event, tu y trouvera une foule d'information pour t'aider ...


Message édité par fxoxo le 02-11-2005 à 18:30:28

---------------
stpfilms.free.fr
n°1237143
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-11-2005 à 09:48:33  profilanswer
 

D'abord merci mais ;)
 
Je n'ai pas dit qu'il y avait un problème pour utiliser un handler dans mon objet mais plutot pour utiliser une méthode de mon objet dans le handler ...
 
En gros mon problème c'est que quand je déclare la fonction de mon handler, le 'this' que j'y mets ne represente pas l'objet de ma classe Test mais l'objet (div) sur lequel l'event a lieu.
Donc fort logiquement il me sort que la fonction publicGetId est inconnue.
 
[edit]
Ah et mettre le handler après que le div ait été ajouté cela ne change rien  
[/edit]


Message édité par anapajari le 03-11-2005 à 09:49:52
n°1237184
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-11-2005 à 10:21:35  profilanswer
 

J'ai trouvé une solution pour ceux que ça interesseraient:
 

Code :
  1. function Test(){
  2.   this.newDiv = document.createElement('div');
  3.   //setting needed attribute for div
  4.   this.newDiv.setAttribute('id', 'div'+(++this.constructor.divMaxId));
  5.   //add text to node
  6.   this.newDiv.appendChild(document.createTextNode('div ayant pour id:'+this.constructor.divMaxId));
  7.   //add node to document
  8.   document.getElementById('divContainer').appendChild(this.newDiv);
  9.  
  10.    /*** la ruse est ici: on recopie l'objet en cours de creation pour pouvoir appeler ses methods dans le handler.
  11.   on ne peut pas se servir dans this dans le handler car cela serait l'objet cliqué et non l'objet de ma classe
  12. ***/
  13.   var obj = this;
  14.  
  15.   //setting click handler on div with public method
  16.   this.newDiv.onmousedown=function(event) { obj.publicGetId();}
  17.   //setting click handler on div with private method
  18.   this.newDiv.onmouseup=function(event) { obj.privateGetId();}
  19.   // PRIVILEGED METHODS
  20.   this.privateGetId = function(){ alert(this.newDiv.getAttribute('id')); }
  21. }
  22. // PUBLIC METHODS
  23. Test.prototype.publicGetId = function (){ alert(this.newDiv.getAttribute('id'));}
  24. // PROTOTYPE PROPERTY
  25. Test.divMaxId=0;  //max id of div


Message édité par anapajari le 03-11-2005 à 10:22:09

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Javascript] set handler dans une classe

 

Sujets relatifs
ecriture variable en javascriptJavascript qui contrôle la taille d'ouverture d'une fenêtre
recupere ou mettre a jour un tableau de double dans une classe[Javascript]2 Frame, fermer/ouvrir celle de gauche[Résolu]
[ Débutant ] Erreur d'exécution en JavascriptProbleme en C++ de classe
[JavaScript] question très bête !!!Problème d'enregistrement des données dans une classe
Rendre un javascript compatible sous firefox[JAVASCRIPT??] Sélectionnez une feuille CSS
Plus de sujets relatifs à : [Javascript] set handler dans une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR