Nicola: DOM einem Anfänger erklären

Entschuldigung für die späte Störung :),
aber ich komm nicht ganz klar mit dem DOM (trotz der sonst umfassenden Hilfe von Selfhtml)

Bei folgendem Sourcecode:

<body>
<table border="0" cellspacing="0" cellpadding="0" id="formtab">
 <tr>
  <td colspan="2" width="600" height="40"><a href="#" onFocus="if(this.blur)this.blur()" onmouseover="MM_showHideLayers('div_unternehmen','','hide','div_leistungen','','hide','div_werbung','','hide','div_seminare','','hide');return false;"><img src="../images/pi.gif" width="600" height="40" border="0" alt=""></a></td>
 </tr>
 <tr id="formtr">
  <td width="150" height="400"><img src="../images/pi.gif" width="150" height="400" border="0" alt=""></td>
  <td width="450" id="formtd">

<form method="post" action="seminare_formmail.php" name="buchungsformular">
<input type="hidden" name="redirect" value="seminare_dank.htm">

<div align="center"><select name="seminar" size="1">
 <option>2001-11-12 Telefontraining 1</option>
 <option>2001-11-17 Mindmapping am PC</option>
 <option>2001-11-26 Ganzheitliches Sprechen</option>
 <option>2001-12-03 Geldforum für jedermann</option>
 <option>2002-01-14 Verkaufstraining</option>
 <option>2002-01-21 SAM - Service Basic</option>
 <option>2002-01-26 Marketing, wozu ...?</option>
 <option>2002-02-04 Gedächtnistraining</option>
 <option>2002-02-16 Geldforum für jedermann</option>
 <option>2002-02-23 Special: Bodybalance</option>
 <option>2002-03-04 Verkauf und Beratung</option>
 <option>2002-03-10 Special: Power Day</option>
 <option>2002-03-11 Promotion</option>
 <option>2002-03-18 Ganzheitliches Sprechen</option>
 <option>2002-04-08 SAM - Rhetorik Basic</option>
 <option>2002-04-13 Die neue Rechtschreibung</option>
 <option>2002-04-20 Geldforum für jedermann</option>
 <option>2002-04-27 Business Feng Shui</option>
 <option>2002-06-10 Verkauf von Zusatzprodukten</option>
 <option>2002-06-24 Telefontraining 2</option>
</select></div><br>

<input type="reset" value="Eingabe zurücksetzen">
<input type="submit" value="Buchung abschicken">
</form>

hätte ich in einer Funktion so auf die Formularauswahl zugegriffen:

document.buchungsformular.seminar.option[1].selected

das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...

mit der bitte um Hilfe...

danke, N

  1. Sup!

    document.buchungsformular.seminar.option[1].selected

    Tja, wenn das "true" ist, dann solltest Du wissen, ob die erste Option gewählt ist. Funktioniert das nicht, oder wolltest Du das gar nicht?

    das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...

    Daran liegt's IMHO nicht. Der logische Zugriff auf Formulare ist IMHO nicht abhängig vom darum gebastelten Rest-Markup.

    Gruesse,

    Bio

    1. Sup!

      document.buchungsformular.seminar.option[1].selected

      um ehrlich zu sein hab ich ja was unterschlagen; das ist ein Teil einer Anweisung, die sagt, er (the browser) soll's auf true setzen, was er aber nicht macht; hier der Ausschnitt:
      opener.document.buchungsformular.seminar.option[1].selected = true;

      das opener gehört dazu, funktioniert sonst; nur bei dieser zuweisung nicht (verflixt)

      Tja, wenn das "true" ist, dann solltest Du wissen, ob die erste Option gewählt ist. Funktioniert das nicht, oder wolltest Du das gar nicht?

      es ist die zweite, Zählung beginnt bei 0 (kleine Bemerkung)

      das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...
      Daran liegt's IMHO nicht. Der logische Zugriff auf Formulare ist IMHO nicht abhängig vom darum gebastelten Rest-Markup.

      Was heißt IMHO? kenn mich mit internetdialekt nicht (mehr) so aus
      und bist Du Dir mit dem Zugriff sicher. Beim IE6 (der ja der strikteste bisher ist, oder) kommt eine Fehlermeldung, das er das Objekt nicht findet und er führt die Funktion nicht weiter aus...

      hat aber nichts mit opener zu tun (glaub ich zu 99%)

      gruß, N

      1. Sup!

        document.buchungsformular.seminar.option[1].selected

        um ehrlich zu sein hab ich ja was unterschlagen; das ist ein Teil einer Anweisung, die sagt, er (the browser) soll's auf true setzen, was er aber nicht macht; hier der Ausschnitt:
        opener.document.buchungsformular.seminar.option[1].selected = true;

        Du mußt den selectedIndex setzen. Alles weitere steht in meiner Antwort </?m=11525&t=2027>.

        - Sven Rautenberg

      2. Sup!

        es ist die zweite, Zählung beginnt bei 0 (kleine Bemerkung)

        Tja, wir 31337-people sagen eben auch "die nullte", also ist es doch die erste ;-)

        Gruesse,

        Bio

        1. Morjen Bio !

          Tja, wir 31337-people sagen eben auch "die nullte", also ist es doch die erste ;-)

          Drum können wir Programmierer auch nicht bis 3 zählen:
          0,1,2, ... äh

          Und mehr als 3 Zustände braucht man ja nicht:
          ja, nein, bin mir nicht sicher

          ;-)

          MfG McNavc

          1. Hallo,

            Und mehr als 3 Zustände braucht man ja nicht:
            ja, nein, bin mir nicht sicher

            Beim Atari ST gab es eine OS-Funktion, um zu überprüfen, ob die Diskette gewechselt wurde, welche diese drei Zustände als Antwort liefern sollte. Rate mal, welcher Zustand immer geliefert wurde;-)

            Grüße
              Klaus

  2. Entschuldigung für die späte Störung :),

    Spät ist relativ, denn das Internet schläft nie.... (so, und für den Rest der Antwort schalte ich den Wortschwülster mal lieber wieder aus... ;) ).

    aber ich komm nicht ganz klar mit dem DOM (trotz der sonst umfassenden Hilfe von Selfhtml)

    Bei folgendem Sourcecode:

    Der Source enthält Macromedie-Müll. Mach den lieber mal weg, is wirklich besser so... Naja, aber für das Problem nicht entscheidend.

    hätte ich in einer Funktion so auf die Formularauswahl zugegriffen:

    document.buchungsformular.seminar.option[1].selected

    das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...

    Fast richtige Feststellung, falsche Schlußfolgerung!
    Wie du in </selfhtml/javascript/objekte/forms.htm>, </selfhtml/javascript/objekte/elements.htm> und vor allem </selfhtml/javascript/objekte/options.htm> siehst du, daß du zwar im Prinzip nicht falsch liegst, aber im Detail dann doch.

    Mit document.buchungsformular greifst du auf das Formular zu (alle Informationen des ersten Links). Mit document.buchungsformular.seminar greifst du auf die Select-Liste zu (alle Informationen des zweiten Links). Und das Select-Feld enthält viele Elemente als Array, die man auswählen kann, und die ihrerseits alle Informationen des dritten Links enthalten.

    Mit document.buchungsformular.seminar.option[1].selected erhälst du true oder false, je nachdem, ob die zweite Option deiner Liste gewählt wurde oder nicht.

    Vermutlich willst du aber wissen, welches der vielen Listenelemente selektiert wurde. Dazu fragst du document.buchungsformular.seminar.selectedIndex ab und erhälst die Zahl des selektierten Elements. Das Ergebnis kannst du als Index für deinen Zugriff auf das Element benutzen. Mit document.buchungsformular.seminar.option[document.buchungsformular.seminar.selectedIndex].value erhälst du beispielsweise den Value-Wert des ausgewählten Elements (da du keinen Value angegeben hast, ist der Wert identisch mit dem Elementtext).

    - Sven Rautenberg

    1. danke für solch eine ausführliche Antwort!
      Die Leute nehmen sich heutzutage ja kaum noch Zeit für Ihre technikleidenden Mitmenschen (Wortschwülste gehören einfach dazu!)

      aber wie ich Bio schon geantwortet hab, ist das eigentlich eine zuweisung namens
      opener.document.buchungsformular.seminar.option[1].selected = true;

      die im IE6 ganz und gar nicht funktioniert; Deine Links hab ich noch nicht nachgelesen und ich hoffe Du hast mich nicht eh schon mit der Nase auf die Lösung des Problems gestoßen, das wäre mir äußerst peinlich

      danke und gruß, N

      1. Hallo Nicola!

        aber wie ich Bio schon geantwortet hab, ist das eigentlich eine zuweisung namens
        opener.document.buchungsformular.seminar.option[1].selected = true;

        das geht mit:
          document.buchungsformular.seminar.selectedIndex=1;
        und sollte laut MSDN auch im IE gehen.

        Gruss,
         Carsten

        1. Hallo Nicola!

          aber wie ich Bio schon geantwortet hab, ist das eigentlich eine zuweisung namens
          opener.document.buchungsformular.seminar.option[1].selected = true;

          das geht mit:
            document.buchungsformular.seminar.selectedIndex=1;
          und sollte laut MSDN auch im IE gehen.

          Gruss,
          Carsten

          Hallo!
          ich war schon knapp dran zu jubeln aber, es funktioniert erst wieder nicht (in meinem IE5.5, darum möchte ich nochmals auf das Objekt opener zu sprechen kommen. Das funktioniert ja nur wenn ich ein Fenster mit window.open() aufgemacht habe, oder...?

          gruß, N

  3. Hallo Nicola!

    document.buchungsformular.seminar.option[1].selected

    Den Index des ausgewählten Elements bekommst du mit:
      document.buchungsformular.seminar.selectedIndex
    (also z.b. 3 für 2001-12-03 Geldforum für jedermann)

    und dessen Wert (falls du der Übersicht halber einen benutzen möchtes) mit:

    document.buchungsformular.seminar[document.buchungsformular.seminar.selectedIndex].value

    Ein Beispiel dafür findest du in der Selfhtml-Quickbar:
    http://selfhtml.teamone.de/navigation/quickbar/index.htm
    bzw. der spannende Teil daraus im Quelltext:
    view-source:http://selfhtml.teamone.de/navigation/quickbar/liste.htm

    das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...

    ne, damit hat das nix zu tun.

    Gruss,
     Carsten

  4. Hallo Nicola,

    document.buchungsformular.seminar.option[1].selected

    das funktioniert aber nicht, weil das Formular in einer Tabelle drin steht...

    Nein, das funktioniert deshalb nicht, weil es nicht option sondern options[indexwert_ab_0] lauten muss, also:
    document.buchungsformular.seminar.options[1].selected=true;

    MfG, Thomas