Bjoern S.: JavaScript-Zugriff auf nachträglich erzeugte DOM-Elemente

Guten Tag allerseits,

im Zuge der allgemeinen Web2.0-Welle versuche ich, die Möglichkeiten der DOM-Tree-Manipulation mittels JavaScript ein bißchen auszuloten. Dabei bin ich auf folgendes Problem bei der Verwendung von Formularen gestoßen:

Wird ein Formularelement wie "textarea" mittels "createElement" und "insertBefore" nachträglich in den Baum eingeklinkt, kann man per JavaScript (document.myform.myelement.value) nicht auf das neue Element zugreifen, obwohl es einen gültigen Namen trägt. JavaScript äußert sich mit der bekannten "... has no properties"-Fehlermeldung, kennt das Element also offenbar nicht. Laut DOM-Inspector hingegen ist der Name des Formularelements aber korrekt vergeben.

Hat jemand von Euch dieses Problem auch schon kennengelernt - und beheben können? Gibt es vielleicht eine Funktion, die für JavaScript Änderungen im DOM-Tree "sichtbar"/zugreifbar macht? Habe ich etwas übersehen? Ich bin für jede Hilfe dankbar.

Viele Grüße,

  • Björn
  1. Guten Morgen,

    hast Du mal versucht weniger mit dem name-Attribut von Formularen und Elementen zu arbeiten sondern ID?

    Also: die neu eingehängte Textarea kannst Du dann direkt ansprechen mit getElementById(myId). Funktioniert erfahrungsgemäss bei dem DOM-Geturne besser als die alten name-Methoden.

    Gruss
    Marcus

  2. Hi,

    Wird ein Formularelement wie "textarea" mittels "createElement" und "insertBefore" nachträglich in den Baum eingeklinkt, kann man per JavaScript (document.myform.myelement.value) nicht auf das neue Element zugreifen,

    in welchen Browsern hast Du dies erlebt?

    Laut DOM-Inspector hingegen ist der Name des Formularelements aber korrekt vergeben.

    Wie sieht der XML-Export des Bereiches aus, den Du mittels des DOM-Inspectors herstellen kannst, und wie sieht der statische Kontext aus?

    Hat jemand von Euch dieses Problem auch schon kennengelernt

    Bisher noch nicht. Sind die Elemente überhaupt in der elements-Collection enthalten?

    Gibt es vielleicht eine Funktion, die für JavaScript Änderungen im DOM-Tree "sichtbar"/zugreifbar macht?

    Normalerweise sollte das per se der Fall sein. Probleme sind - zumindest in Browsern, die einen Zusatz namens DOM-Inspector besitzen - nach meiner Erfahrung zwar möglich, aber selten.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. Hallo Bjoern.

    Wird ein Formularelement wie "textarea" mittels "createElement" und "insertBefore" nachträglich in den Baum eingeklinkt, kann man per JavaScript (document.myform.myelement.value) nicht auf das neue Element zugreifen, obwohl es einen gültigen Namen trägt. JavaScript äußert sich mit der bekannten "... has no properties"-Fehlermeldung, kennt das Element also offenbar nicht.

    Nicht JavaScript äußert sich diesermaßen, sondern der IE. Offenbar ist er zu dumm, nach dem Einfügen der Textarea das entsprechende Objekt namentlich verfügbar zu machen. Ich kann das Problem jedenfalls nur im IE nachvollziehen.

    Greifst du auf die Textarea jedoch mittels elements–Collection bzw. getElementsByTagName zu, funktioniert es.

    Einen schönen Donnerstag noch.

    Gruß, Mathias

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
  4. Hi,

    Wird ein Formularelement wie "textarea" mittels "createElement" und "insertBefore" nachträglich in den Baum eingeklinkt, kann man per JavaScript (document.myform.myelement.value) nicht auf das neue Element zugreifen, obwohl es einen gültigen Namen trägt.

    Auch in Browsern oder nur im IE?
    Falls letzteres: http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp, bei "Remarks"

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi,

      http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp, bei "Remarks"

      yiiiehah. Wenn ich das W3C richtig verstehe, soll der bei createElement übergebene Wert der _Name_ des Elements sein. Microsoft verlangt plötzlich etwas, das eher einem innerHTML ähnelt ... Habemus crisis.[1]

      Cheatah

      [1] Frei übersetzt: Ich krieg 'ne Krise ;-)

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi,

        yiiiehah. Wenn ich das W3C richtig verstehe, soll der bei createElement übergebene Wert der _Name_ des Elements sein. Microsoft verlangt plötzlich etwas, das eher einem innerHTML ähnelt ... Habemus crisis.[1]

        Was haben Toyota und Microsoft gemeinsam? Das Motto: Nichts ist unmöglich ... ;-)

        [1] Frei übersetzt: Ich krieg 'ne Krise ;-)

        Etwas genauer übersetzt: Wir, Cheatah, von Gottes Gnaden, geruhen, eine Krise zu haben.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          Hi,

          yiiiehah. Wenn ich das W3C richtig verstehe, soll der bei createElement übergebene Wert der _Name_ des Elements sein. Microsoft verlangt plötzlich etwas, das eher einem innerHTML ähnelt ... Habemus crisis.[1]

          Was haben Toyota und Microsoft gemeinsam? Das Motto: Nichts ist unmöglich ... ;-)

          [1] Frei übersetzt: Ich krieg 'ne Krise ;-)

          Etwas genauer übersetzt: Wir, Cheatah, von Gottes Gnaden, geruhen, eine Krise zu haben.

          cu,
          Andreas

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. Hi,

        soll der bei createElement übergebene Wert der _Name_ des Elements sein. Microsoft verlangt plötzlich etwas, das eher einem innerHTML ähnelt ...

        Ist optional - muß man also nicht so machen.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!