Tom: Bild in einem Layer (Netscape) ansprechen, der in Tabellen geschachtelt wird.

Hallo Forum

Ich habe hier eine Erweiterung der 10. häufigsten JavaScript-Frage "Wie spreche ich Images in Layern (Netscape) an".
Das Ansprechen der Image-Objekte im Layer funktioniert in meinem Beispiel grundsätzlich richtig (siehe untere, nur rote Tabelle).
Ist jedoch der Layer in einer 2-fach geschachtelten Tabelle eingefügt (obere, gelb-rote Tabelle), enthält das entsprechende Image-Array keine Bilder mehr, das Image-Objekt lässt sich also nicht mehr ansprechen.

Der Source-Code:
   <html>
   <head>
      <title>Test-Dok</title>
      <script type="text/javascript" language="JavaScript">
<!-- JS-Funktion -->
         function testImage(sLayerName)
         {
            if(document.layers)
            {  
               iImgCount = document.layers[sLayerName].document.images.length;
               alert("Anzahl Bilder im Layer: "+ iImgCount);
            }
         }
         //-->
      </script>
    </head>
   <body>
<!-- Layer in 2-fach geschachtelter Tabelle: Der Alert gibt 0 Bild-Objekte zurück -->
      <table cellspacing="8" cellpadding="8" border="0" bgcolor="#ffffcc">
      <tr>
          <td>   </td>
          <td>            
            <table cellspacing="2" cellpadding="2" border="0" bgcolor="#ffccff">
            <tr>
               <td>
                  Bild in 2-fach geschachtelter Tabelle:
               </td>
               <td>
                  <div id="TestLayer" style="position:relative; z-index:1; visibility:show;">
                     <a href="#" onClick="testImage('TestLayer');return false;">
                        <img border="0" src="ima/perle.gif" width="80" height="80">
                     </a>
                  </div>
               </td>
            </tr>
            </table>
         </td>
      </tr>
      </table>
      <br><hr><br>
<!-- Layer in nur 1 Tabelle: Der Alert gibt die korrekte Anzahl Bild-Objekte zurück. -->
      <table cellspacing="2" cellpadding="2" border="0" bgcolor="#ffccff">
      <tr>
         <td>
            Bild in 1-fach geschachtelter Tabelle:
         </td>
         <td>
            <div id="TestLayer2" style="position:relative; z-index:1; visibility:show;">
               <a href="#" onClick="testImage('TestLayer2');return false;">
                  <img border="0" src="ima/perle.gif" width="80" height="80">
               </a>
            </div>
         </td>
      </tr>
      </table>
   </body>
   </html>

Das Beispiel lässt sich auch online unter http://195.127.155.198/test/test2.htm abrufen.

Fragen:

  • Was mache ich falsch ?
  • Können andere Forumsteilnehmer das Verhalten mit Netscape reproduzieren (dazu einfach auf die Bilder klicken)?
  • Gibt es einen Workaround (Bedingung: Ich brauche min. 2-fach geschachtelte Tabellen und ich muss die src-Eigenschaft des Image-Objektes ansprechen können, zwecks Mousover-Effekt)?

Ich hoffe, jemand kann mir dieses eigenartige Verhalten von Netscape erklären, bzw. eine Lösung für mein Problem aufzeigen kann.

Besten Dank im voraus.

Grüsse
Tom

  1. Hallo Forum

    Ich habe hier eine Erweiterung der 10. häufigsten JavaScript-Frage "Wie spreche ich Images in Layern (Netscape) an".
    Das Ansprechen der Image-Objekte im Layer funktioniert in meinem Beispiel grundsätzlich richtig (siehe untere, nur rote Tabelle).
    Ist jedoch der Layer in einer 2-fach geschachtelten Tabelle eingefügt (obere, gelb-rote Tabelle), enthält das entsprechende Image-Array keine Bilder mehr, das Image-Objekt lässt sich also nicht mehr ansprechen.

    Hallo Tom

    habe Deine Testseite ausprobiert - der aergerliche Effekt ist leider reproduzierbar.

    Der Source-Code:

    da ist mir nichts faules aufgefallen (allerdings habe ich keine so guten JS-Kenntnisse, bin Neuling).
    Was mir aber jetzt seit NN-4.73  x-mal untergekommen ist: ich habe irgendeinen kleinen JS-
    Mist gebaut, der klappt nicht, ich brüte, erkenne den Fehler, verbessere ihn, klappt trotzdem nicht.
    X-mal durchgehen, mit SelfHTML-Referenz vergleichen, muss doch alles gehen...
    Rechner resetten, klappt immer noch nicht. Gibts nicht...
    File auf andere Maschine, online aufrufen (ist vielleicht nur lokal....) - nix.

    Letzte Idee: neues File anlegen, und den ganzen Code rüberkopieren. Mal sehen.

    Und klappt!!!

    Vielleicht hast Du auch diesen komischen Effekt, dass alles richtig
    dasteht, der NN das File aber nicht mehr 'leiden' kann.

    (Ich wollte das mal dann posten, wenn ich mir wirklich sicher bin, dass das reproduzierbar ist
    und nicht an mir und/oder meinem System liegt. Aber als Anfänger ist man vorsichtig, weil man
    nicht viel vom Innenleben der Browser versteht und sich nicht lächerlich machen will.)

    (Andererseits hat das der Netscape 4.6 nie gemacht, und zu seinen Zeiten
    habe ich mir noch mehr Fehler geleistet.)

    Solltest Du es probieren und es ist bei Dir auch so, so lass michs bitte wissen - es ist wirklich
    lästig und man kommt sich solange blöd vor, bis andere das gleiche feststellen.

    Wüsche Dir Erfolg

    Uwe.

    1. Hallo Uwe

      habe Deine Testseite ausprobiert - der aergerliche Effekt ist leider reproduzierbar.

      Danke :-(((

      ...
      Vielleicht hast Du auch diesen komischen Effekt, dass alles richtig
      dasteht, der NN das File aber nicht mehr 'leiden' kann.

      »»  ...

      Solltest Du es probieren und es ist bei Dir auch so, so lass michs bitte wissen - es ist wirklich
      lästig und man kommt sich solange blöd vor, bis andere das gleiche feststellen.

      Das Testfile ist ein extra gebautes Beispiel, um den Fehler isoliert betrachten zu können.
      Im Ursprungsfile, das wesentlich grösser und komplexer ist, habe ich exakt dasselbe Problem.
      Ich denke nicht, dass der Fehler von der Datei herrührt. :-(

      Danke trotzdem fürs testen.

      Vieleicht weiss jemand anderes noch ein Tip ...

      Grüsse
      Tom

      1. Hallo Uwe

        habe Deine Testseite ausprobiert - der aergerliche Effekt ist leider reproduzierbar.

        Danke :-(((
        Das Testfile ist ein extra gebautes Beispiel, um den Fehler isoliert betrachten zu können.
        Im Ursprungsfile, das wesentlich grösser und komplexer ist, habe ich exakt dasselbe Problem.
        Ich denke nicht, dass der Fehler von der Datei herrührt. :-(

        Danke trotzdem fürs testen.

        Vieleicht weiss jemand anderes noch ein Tip ...

        Grüsse
        Tom

        Hallo Tom,

        das ist auch nicht der Grund. Bin jetzt auf das Problem gekommen.
        Bei mir funktioniert document.layers[<Layer>].document.write(text)
        im Netscape stur solange nicht bis das <div> im Dokument durch <layer> ersetzt ist. Offensichtlich ist das NN-Layermodell manchmal
        nur dann korrekt, wenn auch der eigentlich obsolete layer-tag dasteht.
        Unerfreulich fuer uns.

        Tschuess

        Uwe
        ersetzt wird.