Toon posts:

[JS] Het element met een event in Mozilla, hoe?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Eerst even wat code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function doRainbow()
{
     if (document.all) {obj=event.srcElement}
       else {obj=event.target};
       TimerID = setInterval("obj.style.color = makeColor();",100);
}

x=document.getElementsByTagName("a");
i=0;
while(i < x.length) {  
addEvent(x[i],"mouseover",doRainbow,true); 
addEvent(x[i],"mouseout",stopRainbow,true); 
i++;

}

IE luistert er wel naar met zijn event.srcElement, maar ik krijg Mozilla maar niet aan de gang.
Hoe krijg ik voor elkaar dat Mozilla ook weet wat het actieve element is (het element dat een event heeft ondergaan)?

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

Annie

amateur megalomaan

Wordt bij netscape het event niet meegestuurd met de functie? dus:
code:
1
2
3
4
5
6
function doRainbow(e)
{
  if (document.all) obj = event.srcElement;
  else obj = e.target;
  // ...
}

btw. wat is addEvent voor iets? Eigen x-browser-brouwsel? Of wordt het tijd dat ik weer de DOM induik om bij te leren? :o

Today's subliminal thought is:


Verwijderd

Topicstarter
Eigen x-browser-brouwsel van iemand anders (Scott Andrew):

Bedankt voor de tip, maar die werkt (en volgens mij zou dat wel moeten werken, maar ja);

Hij geeft:
error line 60: obj.style has no properties

Moet ik anders de hele code geven?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:22

crisp

Devver

Pixelated

Zoeken met Google levert misschien wel wat links met informatie en voorbeelden op. Ik kan helaas zelf hier niets uitproberen omdat ik hier alleen de beschikking heb over IE5.0.
Dit:
code:
1
2
3
4
5
6
7
8
x=document.getElementsByTagName("a");
i=0;
while(i < x.length) {  
addEvent(x[i],"mouseover",doRainbow,true); 
addEvent(x[i],"mouseout",stopRainbow,true); 
i++;

}

Lijkt echter niet te werken onder IE5.0 - x blijft undefined terwijl ik toch de volgende links mijn HTML heb staan:
code:
1
2
<a id="linkje1" href="blaat.html">Dit is een link</a>
<a id="linkje2" href="blaat.html">En dit ook</a>

Intentionally left blank


Verwijderd

/me roept Claaaaayyyyyyy :P

Verwijderd

code:
1
2
x[i].addEventListener("mouseover",doRainbow,true);
x[i].addEventListener("mouseout",stopRainbox,true);

is misschien wat je zoekt.

Verwijderd

Topicstarter
Om misverstanden te voorkomen, hier de (bijna) volledige code:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<script>
function addEvent(elm, evType, fn, useCapture)
{  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be made");
  }
} 

function removeEvent(elm, evType, fn, useCapture)
{
  if (elm.removeEventListener){
    elm.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.detachEvent){
    var r = elm.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

function ie_getElementsByTagName(str) {
 if (str=="*")
  return document.all
 else
  return document.all.tags(str)
}

if (document.all)
 document.getElementsByTagName = ie_getElementsByTagName
 
var rate = 20;   
var elmH = 0;   // Hue
var elmS = 128; // Saturation
var elmV = 255; // Value
var clrOrg;     // A color before the change
var TimerID;    // Timer ID

function doRainbow(e)
{   if (document.all) {obj=event.srcElement}
      else {obj=e.target};
     TimerID = setInterval("obj.style.color = makeColor();",100);}

function stopRainbow()
{obj=event.srcElement;
obj.style.color = "#330077";
      clearInterval(TimerID);}
function ChangeColor(obj)
{   obj.style.color = makeColor();}

function makeColor()
{alert("hier staat normaal wat anders");
}
</script>
</head>
<body>
<a id="trest" name="trest" href="test.htm">testdetest</a>
<a href="test.htm">testdetest</a>
<script>
x=document.getElementsByTagName("a");
i=0;
while(i < x.length) {  
addEvent(x[i],"mouseover",doRainbow,true); 
addEvent(x[i],"mouseout",stopRainbow,true); 
i++;}
</script></body></html>

getElementsByTagName werkt dan in dit geval ook in ie5
Maar zoals gezeg in Mozilla, lukt het niet, met event.target of e.target of wat dan ook wat ik kan verzinnen (wat niet veel is).

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:22

crisp

Devver

Pixelated

Ik dacht ergens iets gezien te hebben van e.target.id
Probeer gewoon eens wat voorbeelden te zoeken met Google en probeer een en ander uit.

Intentionally left blank


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

Annie

amateur megalomaan

Even vraagje tussendoor.
Gaat onderstaande uberhaupt wel werken (aangezien op het moment van evalueren van de interval obj niet meer bekend is):
code:
1
TimerID = setInterval("obj.style.color = makeColor();",100);

Dat zou namelijk een verklaring zijn voor dit
Op dinsdag 29 januari 2002 02:07 schreef Martijn22 het volgende:
Hij geeft:
error line 60: obj.style has no properties

Today's subliminal thought is:


Verwijderd

Het zou kunnen werken omdat obj als global variable wordt gedeclareerd.

Verwijderd

Topicstarter
Nou ik heb het voor elkaar gekregen met:
e.target.parentNode
Kennelijk is het dan wel een object de goed properties,
wat e.target dan is mag joost weten.

Bedankt iig allemaal. Ik ben toch wel op de goed weg geholpen door jullie.
Het is een soort alternatief voor dat rainbow-script-geval op dynamicdrive, Je hebt er niets aan, maar het was leuk om aan te werken.

Er is nog iets wat ik niet snap bij die Mozilla. Dat ik die functie-variabele e moet maken om e.target.parentNode te kunnen gebruiken, terwijl als ik de functie aanroep helemaal geen waarde invul in die functie. Beetje vaag hoor. :?
Mwaah, moet ik maar eens opzoeken hoe dat nou weer zit.
Annie heeft het al een beetje uitgelegd in zijn eerste reactie, geloof ik.

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

Clay

cookie erbij?

Die e is gewoon het event object wat je in de functie binnenkrijgt oid. Je plakt je functie als handler aan de document.mouse[move/down/up], en in Netscape 4 en mozilla geeft dat die e mee. je kan het ook anders noemen als je wil.
In ie is dat ding "event", die zal wel globaal zijn dan.

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


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

Annie

amateur megalomaan

Op dinsdag 29 januari 2002 12:58 schreef Blues het volgende:
Het zou kunnen werken omdat obj als global variable wordt gedeclareerd.
hmmz, niet goed opgelet dus :o
Op dinsdag 29 januari 2002 19:17 schreef Clay het volgende:
In ie is dat ding "event", die zal wel globaal zijn dan.
In IE heb je idd de beschikking over het event object in eventhandlers (valt binnen de scope(?) van het window object).

Today's subliminal thought is:


Verwijderd

Topicstarter
Ah. Zo zit dat.
Pagina: 1