opa: getElementsByName

hallo,

ich habe folgendes problem:
während der firefox alles richtig macht, bekomme ich vom internet explorer die folgende fehlermeldung:

'document.getElementsByName(...)[...].style ist kein Objekt'

laut selfhtml (http://de.selfhtml.org/javascript/objekte/style.htm) sollte der ie aber auch auf das style-objekt zugreifen können.

kann mir da jemand sagen, warum das der ff richtig interpretiert und der ie sich aufregt?

danke, opa

  1. Lieber opa,

    'document.getElementsByName(...)[...].style ist kein Objekt'

    Anscheinend referenziertst Du hier ein Objekt, dass die Eigenschaft [...].style haben soll (die selbst wiederum natürlich ein Objekt ist). Und die hat es wohl eben nicht. Im IE heisst das dann immer gleich "ist kein Objekt".

    laut selfhtml (http://de.selfhtml.org/javascript/objekte/style.htm) sollte der ie aber auch auf das style-objekt zugreifen können.

    Kann er auch. Ich hab's ausprobiert! ;-)

    kann mir da jemand sagen, warum das der ff richtig interpretiert und der ie sich aufregt?

    Dazu musst Du schon einen Code-Schnippsel anbieten! Ich möchte sehen, wie Du auf die Eigenschaft (bzw. das Objekt) style zugreifst, und wie das diese Eigenschaft habende Objekt dazu aussieht.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Ausschnitt aus dem HTML-Formular:

      <tr>
               <td>Anzahl der Piktogramme:</td>
               <td>
                  <select id="icon" onChange="chg_Icon();">
                     <option value="1">1</option>
                     <option value="2">2</option>
                     <option value="3">3</option>
                     <option value="4">4</option>
                     <option value="5" selected>5</option>
                     <option value="6">6</option>
                     <option value="7">7</option>
                     <option value="8">8</option>
                     <option value="9">9</option>
                     <option value="10">10</option>
                  </select>
               </td>
            </tr>
            <tr name="icon_row" style="display: table-row;"><td>Piktogramm 1:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: table-row;"><td>Piktogramm 2:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: table-row;"><td>Piktogramm 3:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: table-row;"><td>Piktogramm 4:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: table-row;"><td>Piktogramm 5:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: none;"><td>Piktogramm 6:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: none;"><td>Piktogramm 7:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: none;"><td>Piktogramm 8:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: none;"><td>Piktogramm 9:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>
            <tr name="icon_row" style="display: none;"><td>Piktogramm 10:</td><td>Bilddatei: <input type="file" name="icon[]" size="30"> / Text: <input name="piktotext[]" size="30" maxlength="150"></td></tr>

      Die Funktion chg_Icon():

      function chg_Icon()
      {
         n = document.forms[1].elements["icon"].value - 1;

      for(i=0;i<=9;i++)
         { document.getElementsByName("icon_row")[i].style.display = "none"; }

      for(i=0;i<=n;i++)
         { document.getElementsByName("icon_row")[i].style.display = "table-row"; }
      }

      1. hi,

        <tr name="icon_row" style="display: table-row;">

        wie kommst du darauf, dass TR ein attribut name hätte?

        aber da du ja sowieso (fast) alle TR ansprechen willst, kannst du eigentlich gleich getElementsByTagName nehmen.
        (bei deinem beispielcode müsstest du dann nur das erste TR übergehen, also schleife eins später loslaufen lassen.)

        btw: getElementsByIrgendwas innerhalb einer schleife aufzurufen, ist zu teuer.
        ermittle die elemente vor der schleife, und lege sie in einem javascript-objekt ab, welches du dann mittels schleife durchläufst.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. aber da du ja sowieso (fast) alle TR ansprechen willst, kannst du eigentlich gleich getElementsByTagName nehmen.
          (bei deinem beispielcode müsstest du dann nur das erste TR übergehen, also schleife eins später loslaufen lassen.)

          ja, aber das war ja nur ein code-schnipsel, das formular ist voll mit <tr>-tags. was wäre denn eine bessere methode, gerade diese <tr>-tags in meinem code-schnipsel (außer natürlich das erste) zu bearbeiten?

          1. Lieber opa,

            der IE hat ein Problem mit Deinem Script, da er als Wert für document.getElementsByName("icon_row") ein leeres Objekt zurückliefert (so als gäbe es keine Elemente mit diesem Namen im Dokument). Daher kann er auch nicht auf deren style-Eigenschaften zugreifen.

            Anscheinend ist die Art, auf die Elemente zuzugreifen nicht sinnvoll genug für Dein Vorhaben. Mein Vorschlag: Definiere doch innerhalb Deines Formulars eine <ul> mit einer ID. Die Kindelemente dieser <ul> sind lauter <li>s mit <input>-Elementen darin. Ich habe das zwar noch nie gemacht, aber mit soetwas wie "childNode" (auch ein Array) oder "next sibling" müsstest Du doch auf die einzelnen <li>s zugreifen können, oder?

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. der IE hat ein Problem mit Deinem Script, da er als Wert für document.getElementsByName("icon_row") ein leeres Objekt zurückliefert (so als gäbe es keine Elemente mit diesem Namen im Dokument). Daher kann er auch nicht auf deren style-Eigenschaften zugreifen.

              scheinbar liegt es ja daran, dass ich den <tr>-tags einen namen verpasst habe und das name-attribut aber bei diesen tags nicht existiert. komme ich mit class nicht besser weiter? oder wäre getElementsByTagName eine bessere lösung?

              das mit der <ul> ist ein bisschen umständlich, aber trotzdem vielen dank für den tipp.

              1. Tag opa.

                Vielleicht wäre das table-Objekt von Peter Seliger was für dich.

                Siechfred

                --
                Früh übt sich ... (74kB)
                Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
          2. Hi,

            ja, aber das war ja nur ein code-schnipsel, das formular ist voll mit <tr>-tags. was wäre denn eine bessere methode, gerade diese <tr>-tags in meinem code-schnipsel (außer natürlich das erste) zu bearbeiten?

            Coding: Darstellungswechsel - Un-/Sichtbare Elemente: Ein-/Ausklappen, Verstecken, Transparenz, Farbe könnte dir weiterhelfen.

            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"!