Event-Handling ohne Eventhandler...
WauWau
- javascript
Hola,
also, das "Thema" sagt es bereits aus: Ich möchte so etwas wie Event-Handling durchführen. Da hat ja MS seine eigenen Funktionsweisen, NS seine eigenen Funktionen, und zuguterletzt hat auch noch W3C da was vorgeschrieben, was mein IE6 zumindest nicht schafft 8|.
Sowas zum Beispiel hier:
if (navigator.userAgent.indexOf("MSIE") != -1)
{
document.onmouseover = theOnOver;
document.onmouseout = theOnOut;
}
else
{
document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
document.onmouseover = theOnOver;
document.onmouseout = theOnOut;
}
(habe ich irgendwo mal rausgeschnitten) sieht zwar soweit ganz nett aus, wirklich. DA haben wir eine IE-proprietäre Lösung, dann eine für NS, und dann ist nix mehr. Wie ist's mit'm Mozilla? Opera? Firefox? Sonstwas-browser?
Also was gibt es da für Möglichkeiten, um was zu machen, dass auf jeden fall mal bei IE<5.0, OP7, NS7, Mozilla1.4 usw. geht?
WauWau
Hallo,
Also was gibt es da für Möglichkeiten, um was zu machen, dass auf jeden fall mal bei IE<5.0, OP7, NS7, Mozilla1.4 usw. geht?
DOM-konform: addEventListener() | removeEventListener(), IE: attachEvent() | detachEvent(). Details sollten sich im Archiv finden lassen.
MfG, Thomas
Hallo Thomas,
Also was gibt es da für Möglichkeiten, um was zu machen, dass auf jeden fall mal bei IE<5.0, OP7, NS7, Mozilla1.4 usw. geht?
DOM-konform: addEventListener() | removeEventListener(), IE: attachEvent() | detachEvent(). Details sollten sich im Archiv finden lassen.
hmm, das sieht mal wieder ganz anders aus, als das bisschen Code, was ich da gepostet habe ...!?
Naja, ich werde mich mal an die Arbeit machen, vielleicht findet sich was....
WauWau
if (navigator.userAgent.indexOf("MSIE") != -1)
{
document.onmouseover = theOnOver;
document.onmouseout = theOnOut;
}
else
{
document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
document.onmouseover = theOnOver;
document.onmouseout = theOnOut;
}(habe ich irgendwo mal rausgeschnitten) sieht zwar soweit ganz nett aus, wirklich. DA haben wir eine IE-proprietäre Lösung,
Nein, das ist eine Lösung, die in bereits in 4er-Browsern funktionieren sollte und auch heute noch ihren Zweck erfüllt.
dann eine für NS,
Das einzig Proprietäre daran ist das zusätzlich nötige captureEvents(), die Zuweisung der Event-Handler läuft so ab wie in den anderen Browsern. In Opera und Mozilla gibt es ebenfalls document.captureEvents(), dort ist es aber meines Wissens nur als Dummy-Funktion zur Abwärtskompatibilität eingebaut, sie wird nicht mehr im Netscape-4-Sinne benötigt.
und dann ist nix mehr. > Wie ist's mit'm Mozilla? Opera? Firefox? Sonstwas-browser?
Die unterstützen alle die obige Methode. Wobei die Unterscheidung nach User-Agent bekanntlich unsinnig ist. In obigem Beispiel würde ein if (document.layers) document.captureEvents(...); zu den Zuweisungen reichen.
Also was gibt es da für Möglichkeiten, um was zu machen, dass auf jeden fall mal bei IE<5.0, OP7, NS7, Mozilla1.4 usw. geht?
Das kommt darauf an, was du vorhast. »Ich möchte so etwas wie Event-Handling durchführen« sagt wenig über die Anforderungen. Für manches reicht die klassische Methode, dazu ist ein Ausschluss von Browsern unter diesem recht hohen Level nicht nötig, für manches ist attachEvent/addEventListener besser geeignet bzw. notwendig, weil es mit dem alten Konzept nicht umsetzbar ist..
Mathias
Hallo molily / Mathias (was denn jetzt...???),
ach so, ok! Das dürfte mir dann fürs erste mal reichen, ich baue mir dann mal nen script zusammen, wenn ich ja weiß, dass das da oben funnktioniert. Ich muss/will sowieso die Event-Handler nicht für den gesamten body (bzw. das gesamte "document") "catchen", sondern nur für ein bestimmtes element. Ich denke,
document.getElementById("elementid").onmouseover = hover();
dürfte es dann tun, nicht wahr?
Ok, thx,
WauWau
Ich muss/will sowieso die Event-Handler nicht für den gesamten body (bzw. das gesamte "document") "catchen", sondern nur für ein bestimmtes element. Ich denke,
document.getElementById("elementid").onmouseover = hover();
Die Funktion soll nicht aufgerufen werden, es soll nur auf das Funktionsobjekt verwiesen werden, also hover ohne ():
document.getElementById("elementid").onmouseover = hover;
Und diese Zuweisung sollte nach dem Laden des Dokuments erfolgen (onload), sonst ist das Element möglicherweise noch nicht ansprechbar.
Mathias
Hallo molily,
Die Funktion soll nicht aufgerufen werden, es soll nur auf das Funktionsobjekt verwiesen werden, also hover ohne ():
ach stimmt, genau.
document.getElementById("elementid").onmouseover = hover;
ist das jetzt W3C-"kompatibler" Syntax?
Und diese Zuweisung sollte nach dem Laden des Dokuments erfolgen (onload), sonst ist das Element möglicherweise noch nicht ansprechbar.
Ok, vergleichbares hätte ich mir schon fast gedacht. das onLoad werde ich aber dann auch ganz gemütlich per
document.onload = init;
machen ;)
WauWau
Hallo,
document.getElementById("elementid").onmouseover = hover;
ist das jetzt W3C-"kompatibler" Syntax?
Das ist nicht W3C-standardisiert, es ist nur Quasi-Standard aufgrund der breiten Unterstützung. Die W3C-standardisierte Methode aus DOM 2 Events http://www.w3.org/TR/DOM-Level-2-Events/events.html ist wie gesagt addEventListener, womit du aber nur Gecko, Opera 7 und Konqueror 3 erreichst. Wenn du sowieso getElementById voraussetzt und somit Netscape 4 und MSIE 4 nicht unterstützt, kannst du auch, je nachdem, welche Methode verfügbar ist, attachEvent für MSIE 5.x+ bzw. addEventListener für die besagten Browser verwenden.
Mathias
Hallo molily,
document.getElementById("elementid").onmouseover = hover;
ist das jetzt W3C-"kompatibler" Syntax?
Das ist nicht W3C-standardisiert, es ist nur Quasi-Standard aufgrund der breiten Unterstützung. Die W3C-standardisierte Methode aus DOM 2 Events http://www.w3.org/TR/DOM-Level-2-Events/events.html ist wie gesagt addEventListener, womit du aber nur Gecko, Opera 7 und Konqueror 3 erreichst. Wenn du sowieso getElementById voraussetzt und somit Netscape 4 und MSIE 4 nicht unterstützt, kannst du auch, je nachdem, welche Methode verfügbar ist, attachEvent für MSIE 5.x+ bzw. addEventListener für die besagten Browser verwenden.
na gut, dann bleibe ich einfach mal bei meinem document.getElementById. Es funktioniert soweit wunderbar, probleme machen mir ganz andere zeilchen in meinem script, aber darum kümmer ich mich dann auch noch ;-)
WauWau