JavaScript-Zugriff auf nachträglich erzeugte DOM-Elemente
Bjoern S.
- javascript
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,
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
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
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
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
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 ;-)
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
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
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