Toon posts:

[JS] hoe krijg ik het object bij event in Mozilla

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zou graag het object willen krijgen waarop een event ontstaan is, dus niet het HTMLelement object, maar het zelf gecreeerde object (die zijn eigen methodes heeft die ik wil uitvoeren).
Ik weet dat het in IE kan door je object een id te geven en dmv van object.id kun je dan verwijzen naar je object.
Dit werkt in ieder geval niet in Mozilla.
Kun je op een of andere manier toch weer achterhalen op welk object een event is ontstaan in Mozilla?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

wilde gok: evnt.target.id ?

/edit:
Shadow3333, thnx for the url
* Annie zat er nog niet zo heel erg ver naast ;)

Today's subliminal thought is:


Verwijderd

misschien heb je hier iets aan:

Mozilla dom reference

Verwijderd

Topicstarter
Bedankt voor de reacties, maar het werkt nog steeds niet (in Mozilla)
De bedoeling van het scrippie is dat een divje beweegt totdat iemand op erop klikt met zijn muis (onmousedown), als hij dan de muis weer loslaat (onmouseup) dan moet hij weer beginnen te bewegen.
Het werkt dus wel in IE, maar niet in Mozilla.
Als ik evnt.target gebruik, dan wordt er verwezen naar het HTMLelement, maar ik krijg niet het oorspronkelijke object te pakken
code:
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
function beeld(id,width,height){
x=document.createElement("div");
x.style.position="absolute";
x.id=id;
x.yy=100;
x.xx=100;
x.vx=vmin+vmax*Math.random();
x.vy=vmin+vmax*Math.random();
x.style.top=x.yy;
x.style.left=x.xx;
x.style.zIndex=0;
x.w=width;
x.h=height+20;
x.style.width=width+"px";
x.style.height=height+"px";
ob=null;X=0;Y=0;
x.onmousedown=function(e){IE?ob=event.srcElement.parentElement:ob=e.target;
                        clearInterval(ob.timer);
                        IE?X=event.offsetX:X=e.layerX;IE?Y=event.offsetY:Y=e.layerY;};
x.onmousemove=function(e){if(ob!=null){IE?ob.style.pixelLeft=event.clientX-X+document.body.scrollLeft-2:ob.style.left=e.clientX-X;
                        IE?ob.style.pixelTop=event.clientY-Y+document.body.scrollTop-2:ob.style.top=e.clientY-Y;return false;}};
x.onmouseup=function(e){if(ob!=null){IE?ob.timer=setInterval(ob.id+".beweeg()",100):ob.timer=setInterval(ob+".beweeg()",100)};ob=null;};
return x;
}

function totaal(id,plaat,tkst,width,height){
temp=new beeld(id,width,height);
temp.beweeg=beweeg;
tempimg=new plaatje(plaat,width,height);
temptekst=new tekst(tkst);
temp.appendChild(tempimg);
temp.appendChild(temptekst);
return temp;
}


var tre=new Array();
function bez(plt,tekst){
tre[tre.length]=new totaal('tre'+tre.length,plt,tekst,100,100);
document.body.appendChild(tre[tre.length-1]);
tre[tre.length-1].timer=setInterval("tre["+(tre.length-1)+"].beweeg()",100);
}//end bez

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
http://www.mozilla.org/docs/dom/domref/dom_event_ref10.html

event.currentTarget ipv event.srcElement

event.currentTarget.id ipv event.srcElement.id

[ Voor 4% gewijzigd door r0bert op 25-02-2004 18:47 ]


Verwijderd

Ik denk dat je een pointer naar het object moet koppelen aan de DIV die je maakt. Dus zoiets:
code:
1
2
3
4
5
function beeld(id,width,height){
     x=document.createElement("div");
     x.myObject = this;
     ...etc
}

Als je dan een event krijgt op de DIV, kun je via die pointer (.myObject) z'n object (en zo z'n methods) targeten.

Snappie? :)

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Zoals ik het zelf heb gedaan is iets als dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
document.dyn = new Array();
var activeObj = null;

function dynObject(id) {
   this.id = id;
   this.layer = document.createElement('div');
   this.layer.id = this.id;
   // of met setAttributes

   [ ... ]

   document.dyn[this.id] = this;   
   this.layer.onmouseover = handleMouseover;
}

function handleMouseover() {
   activeObj = document.dyn[this.id]
}

this.id in de handleMouseover slaat op de id van de Div, omdat de functie aan het div htmlobject is gekoppeld. En omdat je die id in document.dyn aan het dynObject hebt gekoppeld kan je er zo naar verwijzen.

Hetzelfde kan je ook met mousedown doen, werkt in IE en Moz, en met iets meer gepook ook in ns4.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Verwijderd

Topicstarter
Ja een beetje late reactie, ik weet het, maar iig bedankt voor de hulp.
Ik heb wel geprobeerd om je advies op te volgen, maar ik kom er niet uit. Zal wel komen omdat ik te dom ben.

Ik heb het iig opgelost door de onmouse handlers naar de bez functie te gooien. Op die manier kan ik de tre array gebruiken die global is, en dan werkt de boel ook in Mozilla.

Hij doet het nog wel een beetje gek in Mozilla en ik niet begrijpen waarom dat zo gebeurt. De eerste keer als je dat ding in Mozilla versleept, gaat wel lekker, maar de tweede keer verslepen is veel moeilijker, want dan raak je veel sneller het object kwijt.
Weet iemand daar toevallig de oorzaak van?

http://home.hccnet.nl/m.wargers/zweef/zucht.htm
http://home.hccnet.nl/m.wargers/zweef/zweef.js
Pagina: 1