Andi: IE Name Problem

Hallo,

ich erstelle mit DOM ein Inputfeld:

servcell = newrow.insertCell(servcellIndex++);
input = document.createElement('INPUT');
input.setAttribute('type','text');
input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');
input.setAttribute('size','8');
input.setAttribute('maxlength','8');
servcell.appendChild(input);

Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:

for (i=0;i<Namearr.value;i++)
  document.forms[0][Namearr.value[i]].value = 0;

Das funktioniert aber im IE nicht. Es funktioniert aber wenn ich das Element schon vorher angelegt habe. Wenn ich mir alle Elemente der Form anzeige sind die Elemente nicht vorhanden. Beim Abschicken der Daten werden die Daten aber richtig gesendet.

Hat jemand einen Tipp für mich?

Danke für eure Hilfe und Gruß
Andi

  1. ich erstelle mit DOM ein Inputfeld:

    servcell = newrow.insertCell(servcellIndex++);
    input = document.createElement('INPUT');
    input.setAttribute('type','text');
    input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');
    input.setAttribute('size','8');
    input.setAttribute('maxlength','8');

    die setAttribute Funktion ist hier nicht nötig, es reicht:
    input.type = 'text';
    input.name = 'PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']';
    ....

    Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:

    for (i=0;i<Namearr.value;i++)
      document.forms[0][Namearr.value[i]].value = 0;

    Was steht Namearr?

    Das funktioniert aber im IE nicht. Es funktioniert aber wenn ich das Element schon vorher angelegt habe. Wenn ich mir alle Elemente der Form anzeige sind die Elemente nicht vorhanden. Beim Abschicken der Daten werden die Daten aber richtig gesendet.

    Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.

    Struppi.

    1. Hallo,

      Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:

      for (i=0;i<Namearr.value;i++)
        document.forms[0][Namearr.value[i]].value = 0;

      Was steht Namearr?

      In Namearr stehen alle Namen der Inputfelder

      Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.

      Wohl oder übel.

      Gruß
      Andi

      1. for (i=0;i<Namearr.value;i++)
          document.forms[0][Namearr.value[i]].value = 0;

        Was steht Namearr?

        In Namearr stehen alle Namen der Inputfelder

        sicher?

        Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.

        Wohl oder übel.

        100% nicht, aber ohne konkretere Informationen, sieht es so aus.

        Struppi.

        1. for (i=0;i<Namearr.value;i++)
            document.forms[0][Namearr.value[i]].value = 0;

          Was steht Namearr?

          In Namearr stehen alle Namen der Inputfelder

          sicher?

          100% sicher, es funktioniert im Firefox und Opera etc.

          Gruß
          Andi

          1. In Namearr stehen alle Namen der Inputfelder

            sicher?

            100% sicher, es funktioniert im Firefox und Opera etc.

            Na, dann ist ja alles in Ordnung.

            Struppi.

            1. In Namearr stehen alle Namen der Inputfelder

              sicher?

              100% sicher, es funktioniert im Firefox und Opera etc.

              Na, dann ist ja alles in Ordnung.

              Sag das mal meinem Chef ;)

              Gruß
              Andi

          2. Hallo,

            for (i=0;i<Namearr.value;i++)
              document.forms[0][Namearr.value[i]].value = 0;

            Was steht Namearr?

            In Namearr stehen alle Namen der Inputfelder

            sicher?

            100% sicher, es funktioniert im Firefox und Opera etc.

            Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.

            Gruß
            Andi

            1. Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.

              Hast du mal versucht nicht die Funktion setAttribute zu verwenden?

              Deine Angaben und deine Mitarbeit um dein Problem zu lösen ist extrem gering.

              Wie soll man dir helfen, wenn du einfach immer irgendwelche Sachen behauptest, aber weder mit Code belegst noch sonst irgendwie nachvollziehbar machst?

              Struppi.

              1. Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.

                Hast du mal versucht nicht die Funktion setAttribute zu verwenden?

                Ja habe ich probiert

                Deine Angaben und deine Mitarbeit um dein Problem zu lösen ist extrem gering.

                Wie soll man dir helfen, wenn du einfach immer irgendwelche Sachen behauptest, aber weder mit Code belegst noch sonst irgendwie nachvollziehbar machst?

                Code habe ich schon den ganzen der relevant ist eingefügt.

                Nachvollziehbar ist das Ganze schon. Ich erstelle ein Inputfeld in einer Zelle. Es wird dort angelegt mit diesem Namen. Wenn ich das Formular abschicke habe ich den Inhalt des Feldes in diesem Namen.

                Nun möchte ich aber alle auf 0 setzen. Dazu habe ich einen alle Namen in einem Array und gehe diese dann durch. Leider sind diese Elemente in der form aber nicht vorhanden und es kommt zum Fehler.

                Gruß
                Andi

                1. Code habe ich schon den ganzen der relevant ist eingefügt.

                  Nachvollziehbar ist das Ganze schon. Ich erstelle ein Inputfeld in einer Zelle. Es wird dort angelegt mit diesem Namen. Wenn ich das Formular abschicke habe ich den Inhalt des Feldes in diesem Namen.

                  Nun möchte ich aber alle auf 0 setzen. Dazu habe ich einen alle Namen in einem Array und gehe diese dann durch. Leider sind diese Elemente in der form aber nicht vorhanden und es kommt zum Fehler.

                  Ein nachvollziehbares Skript wäre gut gewesen, so musste ich es mir selber bauen:

                  function addField(f)  
                  {  
                      var el = document.createElement('input');  
                      el.name = el.id = 'test';  
                      el.type = 'text';  
                      f.appendChild(el);  
                    
                  }  
                  function clearField(f)  
                  {  
                      var el = f.test;  
                      if(!el) return;  
                      if(el.length)  for(var i = 0; i < el.length; i++) el[i].value = 0;  
                      else el.value = 0;  
                    
                  }
                  

                  und minimaler HTML Code:
                  <form action="#" method="get">
                  <input type="button" value="add" onclick="addField(this.form)">
                  <input type="button" value="auf Null" onclick="clearField(this.form)">
                  <input type="submit" value="submit">
                  </form>

                  Es ist wohl so wie dedlfix sagt. Du musst dem Element eine ID geben.

                  Struppi.

            2. Hallo,

              Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.

              Ja, dann mach das so. Das stört die anderen Browser nämlich nicht.

              Das Problem habe ich hier mal in einem aufs Wesentliche verkürzten Beispiel zusammengestellt:

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
              <html>
              <head>
              <title>Titel</title>
              <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
              <script type="text/javascript">
              <!--
              function init() {
              input = document.createElement('INPUT');
              input.type = "text";
              input.name = "test";
              //input.id = "test";
              document.forms[0].getElementsByTagName("P")[0].appendChild(input);
              }
              //-->
              </script>
              </head>
              <body onload="init();">
              <form action="#" method="get">
              <p>
              <input type="button" name="set1" value="set1" onclick="document.forms[0].elements['test'].value='0';">
              <input type="button" name="set2" value="set2" onclick="this.form.elements['test'].value='1';">
              <input type="submit" name="ok" value="ok">
              </p>
              </form>
              </body>
              </html>

              Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass das beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das Item.

              viele Grüße

              Axel

              PS.: Ein solches vollständiges Kurzbeispiel von Dir oder ein Link zum hochgeladenen vollständigen Beispiel hätte einige Rückfragen hier ersparen können.

              1. Hallo,

                Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass das beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das Item.

                Kann man das irgendwie ändern oder hinzufügen?

                Gruß
                Andi

                PS.: Ein solches vollständiges Kurzbeispiel von Dir oder ein Link zum hochgeladenen vollständigen Beispiel hätte einige Rückfragen hier ersparen können.

                PS.: Ok, das war meine Schuld :(

                1. Hallo,

                  Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das item.

                  Kann man das irgendwie ändern oder hinzufügen?

                  Da wüsste ich nicht wie. Die HTMLCollection hat keine explizite Methode add(item). Da der IE hier einen Fehler hat, weil eigentlich müsste appendChild() die Collection auch um ein namedItem erweitern, kann man nur drumrum arbeiten. Also entweder die IDs zusätzlich setzen oder die Methode von dedlfix verwenden, wobei man das "document.createElement('<input name="foobar">');" natürlich dann wieder vor standardkonformen Browsern verstecken muss.

                  viele Grüße

                  Axel

      2. Hallo,

        In Namearr stehen alle Namen der Inputfelder

        Ist es nicht sinnlos, wenn man die NAmen aller Inputfelder speichert, um sie durchzugehen? Wenn es wirklich ALLE sind, dann schau dir mal getElementsByTagName() an, so kannst du alle Elemente mit Namen zB "input" finden und in ein array speichern.

        Lukas

        1. In Namearr stehen alle Namen der Inputfelder

          Ist es nicht sinnlos, wenn man die NAmen aller Inputfelder speichert, um sie durchzugehen?

          Nein es ist nicht sinnlos.
          Formluarfelder werden mit ihren Namen angesprochen sowohl server- als auch clientseitig.

          Struppi.

  2. echo $begrüßung;

    ich erstelle mit DOM ein Inputfeld:

    input = document.createElement('INPUT');
    input.setAttribute('type','text');
    input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');

    Ich habe die Erfahrung gemacht, dass der IE hier irgendwie kaputt ist. Weder mit setAttribute noch mit input.name=... lässt sich der Name nachträglich ordentlich setzen. Wenn man sich input.outerHTML ausgeben lässt, ist name einfach nicht vorhanden.

    Meine Lösung für das Problem sieht so aus:

    document.createElement('<input name="foobar">');

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Meine Lösung für das Problem sieht so aus:

      document.createElement('<input name="foobar">');

      Wie ich soeben nachlas, ist das anscheinend kein Fehler. Laut MSDN wird das ausdrücklich so empfohlen (jedenfalls für den IE):
      http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createelement.asp
      Ebenfalls in dem Zusammenhang interessant:
      http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp

      echo "$verabschiedung $name";