Marcus: DOM / Einem SELECT einen onClick-Aufruf hinzufügen

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

  1. 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

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. *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

      1. 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

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
        1. 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

          1. 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

            --
            Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
            1. 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

              1. 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

                --
                Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
                1. Mannomann, vielen Dank für Deine Mühe!
                  Ich schau mir das gleich Morgen Früh durch und bin dann hoffentlich schlauer!

                  Gruß
                  _marcus