Javascript Objekt this weitergeben
Frank85
- javascript
Hallo Leute,
ich habe zwei Funktionen:
Popup_Events.prototype.closemenu = function(e){
Menu.menus[this.id].hide(this);
}
Popup_Events.prototype.controlobj_onmouseout = function(e){
timer = window.setTimeout(function(){Popup_Events.prototype.closemenu();}, 200);
};
Die untere Funktion, wird beim onmouseout aufgerufen.
Ich möchte gerne, dass aber erst nach 200ms das Menü schließt und nicht sofort.
Daher wollte ich den Timer einbringen, allerdings kann ich dann in closemenu nicht mehr auf das alte this-Objekt zugreifen! (Wenn ich die Anweisung unten hinschreibe funktioniert alles einwandfrei)
Mein Problem ist es jetzt halt, dass ich nicht weiß wie ich das Problem umgehen kann.
Hat jemand vielleicht eine Idee?
Grüße Frank
Lieber Frank85,
Popup_Events.prototype.controlobj_onmouseout = function(e){
timer = window.setTimeout(function(){Popup_Events.prototype.closemenu();}, 200);
};
verwende einfach eine lokale Variable und Du solltest glücklicher werden:
~~~javascript
Popup_Events.prototype.controlobj_onmouseout = function(e) {
var t = this;
var timer = window.setTimeout(function() {
this.closemenu(this);
}, 200);
};
Der "Trick" daran ist, dass die Variablen t innerhalb der Funktionsdeklaration (also in der anonymen Funktion, die als erster Parameter an setTimeout übergeben wird) bekannt ist und beim Aufruf dieser anonymen Funktion noch immer ihren Wert enthält!
Näheres dazu kannst Du hier nachlesen (bei "Beachten Sie"): Überblenden mit JavaScript
Liebe Grüße,
Felix Riesterer.
Popup_Events.prototype.controlobj_onmouseout = function(e) {
var t = this;
var timer = window.setTimeout(function() {
this.closemenu(this);
}, 200);
};
das ist Mist! Es muss natürlich so lauten:
~~~javascript
Popup_Events.prototype.controlobj_onmouseout = function(e) {
var t = this;
// Das Speichern des Rückgabewertes in "timer" könnte hier entfallen.
var timer = window.setTimeout(function() {
t.closemenu(t);
}, 200);
};
Liebe Grüße,
Felix Riesterer.
Daher wollte ich den Timer einbringen, allerdings kann ich dann in closemenu nicht mehr auf das alte this-Objekt zugreifen! (Wenn ich die Anweisung unten hinschreibe funktioniert alles einwandfrei)
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#methoden-eigener-objekte-und-kontext ff.
Mathias