Programmation objet et attachement d'evenement

Résolu
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009 - 4 janv. 2006 à 17:40
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009 - 5 janv. 2006 à 09:32
Bonjour à tous,

Voici de façon simplifiez mon problème.

function monObjet(id)
{
this.id=id;
this.div=document.getElementById(id);

this.overDiv=overDiv;

if(document.all) { this.div.attachEvent('onmousemove',this.overDiv); }
else { this.div.addEventListener('mousemove',this.overDiv,false);}
}

function overDiv()
{
//PROBLEME
//ici this.id me donnera pas l'id de l'objet javascript
//comment contourner ce problème?
}

Si quelqu'un à une idée... une fois ca résolu, j'aurai un nouveau script que je pense intéressant à poster sur codes sources ... du chantage? mais non mais non

MaX3315

9 réponses

PhiL666 Messages postés 102 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 9 juin 2006
4 janv. 2006 à 22:07
tu pourais à la limite stocké tes objets dans un tableau ... tjrs en utilisant des id
3
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009
4 janv. 2006 à 22:12
Ouep, ben c'est ce vers quoi je me suis diriger pour le moment, mais ca
me donne un code vraiment pas très propre mix entre une programmation
objet et classique.



En fait je crois qu'au final je vais enregistrer tous mes objets dans
un array accessible depuis document. et j'ajoute une fonction
findObj(id) qui retournera l'objet voulu...



Pour mon script en cours c'est par ici : http://codessources.votre-web.com/news_scroller_beta1.html

(je posterai une version propre et commenté dans les jours à venir).

Merci en tout cas de t'être penché sur le problème
3
PhiL666 Messages postés 102 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 9 juin 2006
4 janv. 2006 à 22:02
normal dans ton cas ... le this envoyé sera l'object DIV
jétais tombé sur le même problème en faisant mon dernier script (http://www.javascriptfr.com/code.aspx?ID=35396)

pour remédier au prob., jai utilisé un tableau pour stocké les infos (plutôt que des objets)
et il te reste plus qu'à appeler la fonction overDiv avec leur id - overDiv(id)

un exemple de code vaut mille mots donc regarde rapidement mon script ;)
0
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009
4 janv. 2006 à 22:13
Lol, les grands esprit se croise...
0

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

Posez votre question
PhiL666 Messages postés 102 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 9 juin 2006
4 janv. 2006 à 22:24
lol
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
4 janv. 2006 à 23:28
En fait je crois qu'au final je vais enregistrer tous mes objets dans
un array accessible depuis document. et j'ajoute une fonction
findObj(id) qui retournera l'objet voulu...



pfffff...


if(document.all) { this.div.attachEvent('onmousemove',function (){alert(id)}); }

else { this.div.addEventListener('mousemove',function (){alert(id)},false);



on peut meme pour racourcir

var mafonction = function (){alert(id)}//la ff est une variable de fonction !!

if(document.all) { this.div.attachEvent('onmousemove',ff); }

else { this.div.addEventListener('mousemove',ff,false);



par contre ne mettrez pas de this.id !!! il le transformerait pas....

Il existe des solutions pour tout ... sans tout crader !!

en esperant ne pas etre arrivé trop tard ...

rrk275
0
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009
4 janv. 2006 à 23:42
Oups un peu tard... voici avec la soluce d'un tableau et d'une solution en 'global' : http://codessources.votre-web.com/news_scroller_beta2.html

Pour la soluce de rrk275 elel attendra une bonne nuit de sommeil... je rste toutefois assez ceptique puisque c'est la solution que j'avais tester en premier. Mais une fois les yeux à nouveau en fasse des trous je referrai un essai.

J'ai toutefois un gros point noir dans le dernier code....
il devrait y avoir un attachEvent('action',mafonction); et pas attacheEvent('action',ff)... je vois pas d'ou il sort ce ff.

Est dans ce cas c'est exactement la même chose que mon code... et dans ce cas j'ai pas reussi à recuperer l'objet (au sens programmation objet)... et non pas objet du DOM...

Bonne nuit et à demain.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
5 janv. 2006 à 00:25
a dsl le ff c'était ma variable de dans un autre code et j'avais pas relu mais je suis sur ca marche
fin ca ne permet que la lecture de this.id.Et si ta solution n'a pas marché je pense que c'est parce que tu avait
mis this.id .. fin je ne peux pas lires tes codes non publiés ...



var mafonction = function (){over(id)}//la ff est une variable de fonction !!
if(document.all) { this.div.attachEvent('onmousemove',mafonction); }
else { this.div.addEventListener('mousemove',mafonction,false);

rrk275
0
cs_MaX3315 Messages postés 170 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 11 mai 2009
5 janv. 2006 à 09:32
re-Bonjour

Alors voila exactement ce que je test

function MAX3315_Container(idNode)
{
//initialisation
this.id=idNode;
this.obj=document.getElementById(this.id);

//proprietes
this.listNews=Array();
this.currentIndex=0;
this.inPause=false;
this.initilised=false;

//on ajoute les listener (pause au survole et click)
if(document.all) { this.obj.attachEvent('onmousemove',this.overContainer); }

//methodes / listener de l'objet Container
this.overContainer=MAX3315_overContainer;

//SOLUTION DU TABLEAU GLOBAL - FONCTIONNANT ACTUELLEMENT
//enregistrement de l'objet dans la liste global
this.indexInGlobalContainerList=MAX3315_globalListNewsScroller.length;
MAX3315_globalListNewsScroller.push(this);

return;
}

function MAX3315_overContainer(aEvent)
{
//ici this devrait correspondre à l'instance de mon objet de class Container
// or this reference l'objet du DOM du coup this.id === domNode.id
// et non pas this.id===objectContainer.id

//pour verifier cela rien de plus simple... si je fait this.uneAutrePropriete j'obtient toujours 'undefined'
//alors que this.nodeName ou autre attribut du DOM me retourne bien
}

Voila donc le problème... je pense que pour comprendre ce qui me pose probleme il faut mieux ce dire que j'ai besoin de recupérer this.listNews par exemple, une des propriete de l'object (class Container). Car il est toute à fait normal dans mon cas de recupere this.id puisque this.id==DOMNode.id==object.id... mais sinon c'est pas bien grave, j'ai reussi a contourne le probleme de facon a peu pres potable.

Reste à rendre ca compatible safari et IE...
0
Rejoignez-nous