Ich dreh durch!!! (appendChild im IE)
Der Genervte
- javascript
Hallo,
wer außer Bill Gates kann mir das erklären?
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<body>
<form action="#" method="get">
<!-- hier folgen die Formularelemente -->
</form>
<script type="text/javascript">
alert("Elements before: " + document.forms[0].elements.length);
alert("Test 1: " + document.forms[0].elements["xyz"]);
var myNode = document.createElement("input");
myNode.setAttribute("type", "hidden");
myNode.setAttribute("name", "xyz");
document.forms[0].appendChild(myNode);
alert("Elements after: " + document.forms[0].elements.length);
alert("Test 2: " + document.forms[0].elements["xyz"]);
</script>
</body>
</html>
Ausgabe 1: Elements before: 0
Ausgabe 2: Test 1: undefined
Ausgabe 3: Elements after: 1
Ausgabe 4: Test 2: undefined
Ausgabe 4 kann doch gar nicht sein, habs doch grad unter dem Namen eingefügt! Und die Elemente sind ja offensichtlich auch mehr geworden. Das gleiche Ergebnis erhalte ich mit
myNode.name = "xyz";
FRECHHEIT! Warum machte der IE das so bzw. wie greife ich auf dynamisch generierte Knoten zu, OHNE ihnen ne ID zu geben und danach mit document.getElementById("...") danach zu suchen?
Andi
Lieber Genervter,
FRECHHEIT! Warum machte der IE das so bzw. wie greife ich auf dynamisch generierte Knoten zu, OHNE ihnen ne ID zu geben und danach mit document.getElementById("...") danach zu suchen?
Du hattest doch ein Objekt namens myNode definiert...? Dann nimm es doch! Auch nach dem Einhängen in den DOM Baum ist der Variablenname mit diesem Element verknüpft.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Du hattest doch ein Objekt namens myNode definiert...? Dann nimm es doch! Auch nach dem Einhängen in den DOM Baum ist der Variablenname mit diesem Element verknüpft.
Ja ja, aber ich hab mein Problem auch auf das wesentliche heruntergebrochen. In Wirklichkeit liegt zwischen dem Einfügen und dem Auslesen ein Request. Und danach hab ich eben gerade keine Referenz mehr, weshalb ich über den Namen und NICHT die ID darauf zugreifen will/muss.
Grüße zurück.
Andi
hi,
myNode.setAttribute("type", "hidden");
myNode.setAttribute("name", "xyz");
Stattdessen mal
myNode.type = ...
myNode.name = ...
probiert?
Aber ich meine mich dunkel zu erinnern, dass der IE generell Probleme mit den Namen dynamisch eingefügter Formularelemente hat ...
gruß,
wahsaga
Stattdessen mal
myNode.type = ...
myNode.name = ...
probiert?
Ja, wie ich bereits in meinem ersten Posting geschrieben hab.
Tach Der Genervte,
FRECHHEIT! Warum machte der IE das so bzw. wie greife ich auf dynamisch generierte Knoten zu, OHNE ihnen ne ID zu geben und danach mit document.getElementById("...") danach zu suchen?
Ein Fall für NAME (groß geschrieben, bei späterer Abfrage gern wieder klein!) und outerHTML:
var myNode = document.createElement("input");
myNode.setAttribute("type", "hidden");
myNode.setAttribute("NAME", "xyz");
document.forms[0].appendChild(myNode);
if(document.forms[0].outerHTML)document.forms[0].outerHTML=document.forms[0].outerHTML;
alert("Elements after: " + document.forms[0].elements.length); // 1
alert("Test 2: " + document.forms[0].elements["xyz"]); // [object]
alert("Test 2: " + document.forms[0].elements["xyz"].name); // xyz
Man liest sich,
svg4you
document.forms[0].outerHTML=document.forms[0].outerHTML;
RIESEN FRECHHEIT! :-)
Aber immerhin, es funzt. Vielen Dank und schönes WE.
Andi
Hi,
wer außer Bill Gates kann mir das erklären?
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp
cu,
Andreas