derbaer: document.Form.getElementsById()

Hi,

document.TestForm.getElementsByName('firstname').

ich moechte das input value erfahren von dem input mit dem namen "firstname"
ich moechte aber direkt auf das form "TestForm" zugreifen
deswegen auch "document.TestForm" aber irgentwie will das nicht funktionieren der bricht einfach ab gibt aber auch kein fehler aus er fuehrt nur nach der zeile den test alert den ich eingefuegt hab nicht mehr aus

schreibt man das anders?

  1. Mahlzeit derbaer,

    document.TestForm.getElementsByName('firstname').

    Aha. Und nu?

    Das ist kein vollständiger und korrekter Code - was genau willst Du mit dem genannten Code erreichen, wie genau verwendest Du ihn? Dir ist bewusst, dass sich das Obenstehende von dem in der Überschrift genannten Code (der im Übrigen auch falsch ist) unterscheidet?

    ich moechte das input value erfahren von dem input mit dem namen "firstname"

    Warum greifst Du dann nicht einfach direkt darauf zu?

    alert(document.getElementsByName('firstname')[0].value);

    ich moechte aber direkt auf das form "TestForm" zugreifen

    Warum? Ich dachte, Du willst auf das Eingabeelement zugreifen und nicht auf das Formular, in dem es sich befindet?

    Sei's drum, wenn Du auf das Formular zugreifen willst:

    alert(document.forms['TestForm'].target);

    Wenn Du doch auf das Eingabeelement zugreifen willst, aber sicherstellen willst, dass Du dasjenige im Formular namens "TestForm" erwischst:

    alert(document.forms['TestForm'].elements['firstname'].value);

    deswegen auch "document.TestForm" aber irgentwie will das nicht funktionieren

    Natürlich nicht, solange Du es falsch machst.

    der bricht einfach ab gibt aber auch kein fehler aus

    Unglaubwürdig. Was steht in der Fehlerkonsole?

    er fuehrt nur nach der zeile den test alert den ich eingefuegt hab nicht mehr aus

    Warum zeigst Du diesen - offenbar relevanten - Teil Deines Codes nicht? Müssen wir raten, was genau Du da programmiert hast?

    schreibt man das anders?

    Vermutlich. Solange Du Deinen Lesern aber notwendige Informationen vorenthältst, kann Dir das keiner mit Gewissheit sagen.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo!

      alert(document.forms['TestForm'].target);
      alert(document.forms['TestForm'].elements['firstname'].value);

      Was auch nichts anderes ist als
        document.TestForm.firstname
      bzw. eindeutiger
        document.forms.TestForm.elements.firstname
      Die Klammersyntax ist hier unnötig.

      deswegen auch "document.TestForm" aber irgentwie will das nicht funktionieren

      Natürlich nicht, solange Du es falsch machst.

      Man kann seit JavaScript-Urzeiten über document.formularname auf ein Formular zugreifen. Das ist uneindeutig, aber nicht falsch (JavaScript 1.3,
      HTML5).

      Jannis

      1. Mahlzeit Jannis,

        Was auch nichts anderes ist als
          document.TestForm.firstname
        bzw. eindeutiger
          document.forms.TestForm.elements.firstname

        Richtig.

        Die Klammersyntax ist hier unnötig.

        Die "Klammersyntax" ist aber vielen Anfängern bzw. weniger Bewanderten überhaupt gar nicht bewusst, so dass mit abenteuerlichen, selbst ausgedachten Konstruktionen herumgefrickelt wird - insbesondere, wenn es um per Variable übergebene Formular- oder Elementnamen geht. Deshalb verweise ich eigentlich fast immer (direkt oder indirekt) auf <http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines@title=das entsprechende Kapitel in SELFHTML> ... meist auch mit dem Hinweis auf "Schema 4".

        deswegen auch "document.TestForm" aber irgentwie will das nicht funktionieren

        Natürlich nicht, solange Du es falsch machst.

        Man kann seit JavaScript-Urzeiten über document.formularname auf ein Formular zugreifen. Das ist uneindeutig, aber nicht falsch (JavaScript 1.3,
        HTML5).

        Das ist zwar richtig - aber *irgendetwas* scheint derbaer trotzdem falsch zu machen ... sonst würde sein Code ja wie gewünscht funktionieren. Insbesondere die Behauptung, dass "document.TestForm [...] irgentwie [...] nicht funktionieren" will, ist mindestens ungenau, vermutlich eher nicht korrekt.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. .getElementsByName() gibt je nach Browser ein Array bzw. einen Iterator (so etwas ähnliches, nur nicht mit allen prototypischen Möglichkeiten von Array - wer sich so etwas Beknacktes ausdenkt, arbeitet vermutlich für MicroSoft) zurück. Wenn Du also auf ein Element mit dem name-Attribut "firstname" zugreifen willst, musst Du document.getElementsByName('firstname')[0] verwenden.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Hallo,

      .getElementsByName() gibt je nach Browser ein Array bzw. einen Iterator (so etwas ähnliches, nur nicht mit allen prototypischen Möglichkeiten von Array - wer sich so etwas Beknacktes ausdenkt, arbeitet vermutlich für MicroSoft)

      Knotenlisten gibts überall in der DOM-API, sowohl im Core als auch im HTML-DOM. Die stammen im Übrigen nicht von Microsoft, sondern vom W3C.

      getElementsByName liefert eine HTMLCollection, und dass diese nicht identisch mit einem Array ist, ist klar: Sie ist "live", d.h. sie wird dynamisch aktualisiert, wenn sich der Knotenbaum ändert. Die meisten Array-Instanzmethoden zum Hinzufügen, Löschen und Sortieren ergeben in diesem Kontext keinen Sinn. Lediglich ECMAScript-5-Methoden wie forEach, map, filter usw. wären brauchbar. Das Ausführung von Array-Instanzmethoden im Kontext von HTMLCollections funktioniert auch, aber Array.prototype.forEach.call(htmlcollection, function() {}) usw. liefert einem aufgrund der hybriden Natur von HTMLCollections nicht das, was man erwartet.

      Jannis

  3. h1,

    schreibt man das anders?

    Der Zugriff im DOM auf Formulare ist in SELFHTML doch nun wirklich gut beschrieben, was daran hast Du denn nicht verstanden?

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  4. Hi,

    document.TestForm.getElementsByName('firstname').

    Im Titel schriebst du getElementById statt getElementsByName - was denn nun?

    getElementById ist eine Methode, die ausschliesslich document besitzt. Das ist ja auch sinnvoll, weil IDs documentweit eindeutig sein müssen. Diese Methode kannst du also nicht als Methode bestimmter HTML-Element-Objekte aufrufen, wie das bspw. mit dem erwähnten getElementsByTagName möglich ist.

    aber irgentwie will das nicht funktionieren der bricht einfach ab gibt aber auch kein fehler aus er fuehrt nur nach der zeile den test alert den ich eingefuegt hab nicht mehr aus

    Das kann eigentlich nicht sein.
    Weisst du denn überhaupt, wo dir JavaScript-Fehler angezeigt werden?

    schreibt man das anders?

    Den Text, den du hier geschrieben hast? Ja, den schreibt man anders - und zwar unter sinnvoller Nutzung von Interpunktion. Mach' das bitte künftig - denn „ohne Punkt und Komma” sind Texte schwer verständlich.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hallo,

      document.TestForm.getElementsByName('firstname').
      Im Titel schriebst du getElementById statt getElementsByName

      im Titel schrieb er sogar von getElement_s_ById. Also schon da falsch.

      getElementById ist eine Methode, die ausschliesslich document besitzt.

      Danke, das war mir auch noch nicht bewusst, und die Erklärung ist schlüssig.

      Den Text, den du hier geschrieben hast? Ja, den schreibt man anders - und zwar unter sinnvoller Nutzung von Interpunktion. Mach' das bitte künftig - denn „ohne Punkt und Komma” sind Texte schwer verständlich.

      ACK.

      So long,
       Martin

      --
      Drei Sachen vergesse ich immer wieder: Telefonnummern, Geburtstage und ... äääh ...
  5. Danke fuer die hilfe und die tips
    dannach hab ich gesucht:

    document.forms.testform.firstname

    1. Mahlzeit baer,

      dannach hab ich gesucht:

      document.forms.testform.firstname

      Nein, hast Du nicht.

      Merke: Javascript unterscheidet zwischen Groß- und Kleinschreibung!

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  6. deswegen auch "document.TestForm" aber irgentwie will das nicht funktionieren der bricht einfach ab gibt aber auch kein fehler aus ...

    Das glaube ich nicht, du weißt auch wo du die Fehler findest?

    Struppi.