Objektinstanzen Aufrufen & benutzen

chmee

verstaubtes inventar
Premium-User
Na-Ha-H-Abend :D

Ist sicherlich etwas schnell Erklärbares. Ich arbeite im Moment mit mootools und damit mache ich mehrere Funktionsaufrufe bezüglich CSS-Änderung und Transparenzenänderung.

Das sieht etwa so aus:
Code:
function changeColors() {
 var changeColor = new Fx.Tween('Header');
 changeColor.set('background-image', 'url(./_common/_pix/'+headerColor[SiteNo]+'_O.png)');
 var changeColor = new Fx.Tween('OR');
 changeColor.set('background-image', 'url(./_common/_pix/'+headerColor[SiteNo]+'_ER.png)');
};
Ich muss also das dafür zuständige Objekt instanzieren und dann kommt die Benutzung. Nur, da ich die function changeColors() immer wieder aufrufe, habe ich das Gefühl, ich mülle den Speicher immer mehr zu. Anstatt dessen würde ich gerne nur einmal am Anfang instanzieren, damit ich lediglich den Funktionsaufruf ausführe..
Dabei aber bekomme ich ein "is undefined"

So war mein Gedanke:
Code:
var changeHeader = new Fx.Tween('Header');
var changeOR = new Fx.Tween('OR');

function changeColors() {
  changeHeader.set('background-image', 'url(./_common/_pix/'+headerColor[SiteNo]+'_O.png)');
  changeOR.set('background-image', 'url(./_common/_pix/'+headerColor[SiteNo]+'_ER.png)');
};
Wie mache ich es richtig bzw. wo ist der Fehler ?

mfg chmee
 
Hi,

vielleicht führst du
Code:
var changeHeader = new Fx.Tween('Header');
var changeOR = new Fx.Tween('OR');
aus bevor die Elemente geladen sind? In der Funktion wird glaub ich über
Code:
document.getElementById()
auf das HTML Element zugegriffen. Du müsstest den Code in eine Funktion stecken die beim onload Event vom Body ausgeführt wird. Die Variablen kannst du ja vorher schon definieren damit sie die globle Gültigkeit haben.
 
Dank erstmal, aber leider Nein. Es gibt in mootools den

Code:
window.addEvent('domready', function(){ 
};

Aufruf, der ja genau das machen sollte, nämlich bei DOM-Ready auszuführen, aber auch dort bekomme ich ein is undefined. Ich habe auch mein Javascript zweigeteilt, einen Teil im /Head mit Inits und ersten Funktionen wie die eben Genannte, dann noch der zweite Teil unter /Body, wo die Hauptaufrufe und Funktionen sind. Könnte das das Problem sein ?

mfg chmee
 
Hast du vielleicht einen Link zu deiner Seite, oder kannst du den ganzen Code posten - ist sicher nur eine Kleinigkeit.
Ich habe auch mein Javascript zweigeteilt, einen Teil im /Head mit Inits und ersten Funktionen wie die eben Genannte, dann noch der zweite Teil unter /Body, wo die Hauptaufrufe und Funktionen sind. Könnte das das Problem sein ?
Daran sollte es eigentlich nicht liegen - egal wo du eine Javascript variable definierst sie ist danach im gesamten dokument gültig, außer du definierst sie in einer Funktion.

Du musst auf jeden Fall
Code:
var changeHeader = null;
var changeOR = null;
bevor und außerhalb der Funktion haben in der du
Code:
changeHeader = new Fx.Tween('Header');
changeOR = new Fx.Tween('OR');
ausführst und zwar ohne vorher var zu schreiben.
 
Ah, man muss also der Variable erstmal null zuweisen, wieder ein Puzzlestück dazu :D
Welche Erklärung/Regel gibt es für die Initialisierung mit null ?

mfg chmee
 
Hi,

es gibt eigentlich keine Regel dafür.
Code:
var name = null;
macht das selbe wie
Code:
var name;

Es handelt sich dabei um den standard Wert einer neuen Variablen, ich mach das bei meinen Scripts nur übersichtshalber, damit ich sehe die Variable hat noch keinen WErt.

Dein Fehler lag im Scope(Gültigkeitsbereich der Variablen), damit sie globale Gültigkeit erhalten musst du sie außerhalb einer Funktion ins leben rufen und innerhalb der Funktion ohne "var" aufrufen, da du sonst nicht auf die globale Variable zugreifst sondern in der Funktion eine Variable mit dem selben Namen neu erstellst die nur innerhalb der Funktion gültig ist.
 
Zurück