Programmation objet et attachement d'evenement [Résolu]

Signaler
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009
-
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009
-
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

Messages postés
102
Date d'inscription
mardi 15 mars 2005
Statut
Membre
Dernière intervention
9 juin 2006

tu pourais à la limite stocké tes objets dans un tableau ... tjrs en utilisant des id
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009

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
Messages postés
102
Date d'inscription
mardi 15 mars 2005
Statut
Membre
Dernière intervention
9 juin 2006

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 ;)
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009

Lol, les grands esprit se croise...
Messages postés
102
Date d'inscription
mardi 15 mars 2005
Statut
Membre
Dernière intervention
9 juin 2006

lol
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009

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.
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
170
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
11 mai 2009

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...