Der Genervte: Ich dreh durch!!! (appendChild im IE)

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

  1. 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.

    1. 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

  2. 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Stattdessen mal
      myNode.type = ...
      myNode.name = ...
      probiert?

      Ja, wie ich bereits in meinem ersten Posting geschrieben hab.

  3. 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

    1. document.forms[0].outerHTML=document.forms[0].outerHTML;

      RIESEN FRECHHEIT! :-)

      Aber immerhin, es funzt. Vielen Dank und schönes WE.

      Andi

  4. 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

    --
    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.