attachEvent, die Function und ein Redirect
Kupo
- javascript
0 molily
Hallo zusammen,
ich habe gerade ein unglaublich großes Problem mit dem Internet Explorer, so versuche ich schon seit Stunden folgendes Problem zu lösen, vielleicht kann mir ja jemand helfen:
1. ein Div-Layer wird generiert und mittels folgendem Befehl ein Event zugeordnet
document.getElementById(layername).attachEvent ('onmousedown', functx);
Nun soll sich eben besagtes, generiertes Div-Layer durch einen Klick auf selbiges verändern:
function functx(xc)
{
....
}
Allerdings fangen nun hier die Probleme an, ich kann weder mit
document.getElementById(layername).attachEvent ('onmousedown', functx('name_des_div'));
eine Variable an functx übermitteln, noch kann ich direkt in functx mit "this" arbeiten...
Wie kann nun die Funktion functx "wissen", welches Layer geändert werden muss? Bei Firefox und Opera hat man solche Probleme nicht, aber es soll ja immer noch 66% IE User geben.
Gibt es irgend eine Lösung für dieses Problem?
document.getElementById(layername).attachEvent ('onmousedown', functx('name_des_div'));
eine Variable an functx übermitteln, noch kann ich direkt in functx mit "this" arbeiten...
Ja, siehe http://www.quirksmode.org/js/events_advanced.html.
Wenn du eine der verbreiteten addEvent-Helferfunktionen verwendest, hast du das Problem nicht, weil die die Handlerfunktion im Kontext des Elements ausführen, sodass »this« verwendet werden kann.
Das würde ich dir empfehlen, ansonsten kannst du mit einer Closure arbeiten, die den Layernamen einschließt:
var layername = "foo";
document.getElementById(layername).attachEvent('onmousedown', function () {
functx(layername);
});
Das kann in Schleifen aber zu Problemen führen - entsprechende Lösungen findest du im Forumsarchiv unter den Stichwörtern Closure und Schleife(n).
Eine andere Möglichkeit wäre die Nutzung einer bind-Funktion. Die macht im Grunde dasselbe, nämlich eine Closure anlegen, jedoch die übergebene Funktion im Kontext des Elements ausführen, sodass this wieder stimmt.
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#alternativen-kontext
Genau das macht addEvent auch.
Wegen all diesen Schwierigkeiten arbeitet man eigentlich nie direkt auf der untersten Ebene mit attachEvent, sondern verwendet Helferfunktionen, die die Browserunterschiede und -unzulänglichkeiten nivellieren.
Mathias