Hi !
Also es ist schon etwas schwierig das mal eben zu erklären, da du einen sehr (sagen wir mal) statischen weg gehst.
In JS kann man Funktionen oder Objekte wunderbar an Objekte kapseln - und das zur Laufzeit. Ein Attribut onblur macht nichts anderes. Es macht/zaubert aus der Angabe im Attribut automatisch eine anonyme Funktion. Kannste dir anschauen, wenn du einfach mal per alert die Variable "document.konfigurator.txt_zeile1v.onblur" ausgeben lässt. Dieses "zaubern" funktioniert aber nur in diesem Fall - wenn du es als Attribut im Quelltext angibst.
Was du machst ist: Aus der Eigenschaft/Variable onblur ein String-Objekt zu machen... klar... ein String-Objekt kann nicht viel machen - daher keine Ausgabe:
Code:
var test = "dies ist ein Text";
test();
...kein Fehler aber auch keine Ausgabe. Genauso ists auch mit den Eventhandlern.
In JS kann man so z.B. gaaanz simpel eine Funktion zuweisen:
Code:
var test = function() {
alert("hossa!");
}
test();
Und genauso musst du den Event-Hanlder ändern. Problem hierbei ist, dass man "diesen" Funktionen nicht direkt Attribute mitgeben kann, wie du es versucht hast. Daher gibt es hier verschiedene Möglichkeiten:
Möglichkeit 1:
Code:
function shirtpic() {
alert("ich bin eine Funktion/Methode, die einem Element zugeordnet ist.\n\
Daher kann ich über this auf das Element zugreifen:\
Die Farbe meines Elementes ist: " + this.shirtColor);
}
function shirtcolor(shirtColor) {
var ele = document.konfigurator.txt_zeile1v;
ele.shirtColor = shirtColor;
ele.onblur = shirtpic; // Hier weisen wir die Funktion shirtpic ganz einfach der Variable onblur des Elements "ele" zu.
}
..evtl. ist diese Möglichkeit die beste, da du mit den Eigenschaften des Elementes arbeiten kannst (this.shirtColor). Du bräuchtest also nur ele.shirtColor ändern und das Ergebniss von shirtpic würde darauf zurückgreifen.
Möglichkeit 2, wäre eine neue Funktion zur Laufzeit zu erstellen und diese via eval dem Event-Handler zuweisen:
Code:
function shirtpic(shirtColor) {
alert("Nun bekomme ich meine Farbe per Parameter: " + shirtColor);
}
var ele = document.konfigurator.txt_zeile1v;
eval("ele.onblur = function() {\
shirtpic('"+shirtColor+"');\
}");
...verdau das erstmal und spiel mal mit rum. Ist alles sehr praktisch, wenn man es mal verstanden hat.
Gruss
Jan
PS: Wenn du etwas nicht verstehst, dann probier es einfach mal aus und versuch es zu verstehen.