DOM / Einem SELECT einen onClick-Aufruf hinzufügen
Marcus
- javascript
0 Alexander Foken0 Marcus0 Alexander Foken0 Marcus
Hi,
in ein bestehendes DOM wurde ein neues SELECT eingehängt.
Wie lässt sich diesem SELECT nun der onClick-Aufruf einer Funktion beibringen?
Die Adressierung á la
document.forms[i].elements[i].onClick = MyFunction();
klappt nicht.
Könnt Ihr mir (wie übrigens immer!) helfen?
Vielen Dank!
_marcus
Moin Moin !
Bist Du Dir sicher, daß SELECT-Elemente einen OnClick-Eventhandler haben können? Suchst Du vielleicht OnChange für das gesamte SELECT?
Sollte es ihn geben: Warum baust Du den OnClick-Handler nicht gleich ein?
Alexander
*Schäm* ...ich meine auch OnChange, sorry.
Das Problem bleibt aber das gleiche:
var newSelect = document.createElement("select");
document.getElementById("TD" + theInput).appendChild(newSelect);
document.getElementById("TD" + theInput).getElementsByTagName("input").onChange = CastEntries(1,2);
...lässt sich der OnChange wie ein Child createn und danach appenden? Nicht das ich wüsste, oder?
Vielen Dank für weitere Mühe!
Gruß
_marcus
Moin Moin !
*Schäm* ...ich meine auch OnChange, sorry.
Das Problem bleibt aber das gleiche:var newSelect = document.createElement("select");
document.getElementById("TD" + theInput).appendChild(newSelect);
Äääähh - wer garantiert, daß document.getElementById() immer ein Objekt zurückliefert? Fehler abfangen!
document.getElementById("TD" + theInput).getElementsByTagName("input").onChange = CastEntries(1,2);
hier auch!
Was soll das getElementsByTagName("input")? Ich dachte, Du willst ein SELECT bauen?
Was liefert CastEntries(1,2) zurück?
Alexander
Hi Alexander,
ich hab den Ausdruck stark abgespeckt, um hier schnell zur Sache zu kommen. Die Fehler werden entsprechend abgefangen, wir können davon ausgehen, dass die getElementById´s Objekte zurückbekommen.
CastEntries() ist eine Funktion die OnChange aufgerufen werden soll.
Was soll das getElementsByTagName("input")? Ich dachte, Du willst >ein SELECT bauen?
Das war eben wirklich falsch, muss also "select" heissen.
Es klappt aber leider damit ebenfalls nicht...
Danke + Gruß!
_marcus
Moin Moin !
document.getElementById("TD" + theInput).getElementsByTagName("input").onChange = CastEntries(1,2);
CastEntries() ist eine Funktion die OnChange aufgerufen werden soll.
Ja, und was liefert sie zurück?
Du weist ihr Ergebnis schließlich dem onChange-Attribut des Objektes zu, daß document.getElementById("TD" + theInput).getElementsByTagName("input") liefert.
( ^-- Wink mit dem Zaunpfahl )
Alexander
Hi Alexander,
Ich glaub ich steh gerade völlig auf dem Schlauch,
daher nochmal im Überblick:
1. Ich generiere ein neues SELECT und hänge es ins DOM ein.
2. Diesem SELECT könnte ich jetzt z.B. eine ID zuweisen:
document.getElementById("TD" + theInput).getElementsByTagName("select").id= "MyId";
...so als ob von Anfang an dagestanden hätte:
<SELECT ID="MyID">
"nur" das es eben nicht um die ID des SELECTs geht, sondern um seinen onChange Handler...
also:
<SELECT onChange="FunctionXY();">
Seh ich den Wald vor lauter Bäumen nicht?
Gruß
_marcus
Moin Moin !
Ich glaub ich steh gerade völlig auf dem Schlauch,
Seh ich den Wald vor lauter Bäumen nicht?
Ja:
deinobject.onChange=CastEntries(1,2);
Was passiert da?
Es ist eine Zuweisung.
Auf der linken Seite der Zuweisung ist ein Objekt-Attribut, oder etwas gröber: Eine VARIABLE.
Auf der rechten Seite der Zuweisung ist eine FUNKTION.
Spielen wir mal ein paar Varianten der rechten Seite durch:
answer=42;
Links: Variable
Rechts: Konstante
Ergebnis: answer hat den Wert 42
antwort=answer;
Links: Variable
Rechts: Variable
Ergebnis: antwort hat den selben Wert wie answer.
function sumiere(a,b)
{
return a+b;
}
summe=summiere(1,2);
Links: Variable
Rechts: Funktion
Ergebnis: Funktion wird mit den Parametern aufgerufen und ihr Ergebnis der Variablen zugewiesen. summe ist 3.
document.getElementById("TD" + theInput).getElementsByTagName("input").onChange = CastEntries(1,2);
Links: Variable, wenn auch etwas umständlich ausgedrückt
Rechts: Funktion
Ergebnis: Funktion wird mit den Parametern aufgerufen und ihr Ergebnis der Variablen zugewiesen.
Deswegen die provozierende Frage: Was liefert CastEntries(1,2) zurück?
Du willst, daß der Variable die Funktion selbst zugewiesen wird, oder?
trick17 = new Function('CastEntries(1,2)');
Links: Variable
Rechts: Objekt-Konstruktor, der einen "Zeiger" auf eine Funktion liefert.
Ergebnis: trick17 *ist* eine Funktion, die CastEntries(1,2) ausführt.
http://selfhtml.teamone.de/javascript/objekte/function.htm
Alexander
Mannomann, vielen Dank für Deine Mühe!
Ich schau mir das gleich Morgen Früh durch und bin dann hoffentlich schlauer!
Gruß
_marcus