Fant: Bilderwechsel in verschachtelten layer im NN4

tach

ich weiss dieses thema kommt immerwieder...ich hab auch schon das archiv durchsucht, aber ich kann mein problem trotzdem nicht lösen.

ich hab folgendes aufklappmenu:

<div id="layerframe" style="position:relative; z-index:0;">
 <div id="sub1" class="ueber-uns">
  <table cellspacing="0" cellpadding="0" border="0">
   <tr>
    <td><a href="...." onMouseOut="cp('img11','menudeutsch/ueberuns_1','sub1');" onMouseOver="cp('img11','menudeutsch/ueberuns_1a','sub1');"><img src="../images/menudeutsch/ueberuns_1.gif" width="77" height="26" border="0" name="img11"></a><br></td>
   </tr>
  </table>
 </div>

(.....)

</div>

und die cp funktion sieht folgendermassen aus:

function cp(imageName, fileName, layer)
{
  if (browser == "NN4")
  {
    if (layer)
      //eval('window.document.layerframe.document.layers["'+layer+'"].document.images["'+imageName+'"].src = imgTmp.src');
      self.document.layers["layerframe"].document.layers[layer].document.images[imageName].src = "../images/" + fileName + ".gif";
    else
      document.images[imageName].src = "../images/" + fileName + ".gif";
  }

(...)

}

läuft in IE, NN6 und Opera aber nicht im NN4. was mach ich falsch?
hab gelesen die layers dürfen nur "absolute" ausgerichtet sein für NN4. ging aber auch nicht.
den äusseren layer verwende ich nur um die inneren relativ zu positionieren. kann ich vielleicht dieses problem anders lösen?
mit nur einem layer hat das bilderwechseln nämlich bestens funktioniert.

gruss
Fant

  1. Hi,

    <div id="layerframe" style="position:relative; z-index:0;">
    <div id="sub1" class="ueber-uns">

    Netscape 4 kann mit einem id-Attribut praktisch nichts anfangen. Er geht nach name.

    Cheatah

    1. es will immernoch nicht.
      mach ich das so korrekt?

      HTML:

      <div id="layerframe" style="position:relative;">
        <div id="sub1" name="Nsub1" class="ueber-uns">

      (...)

      </div>
      <div>

      JAVASCRIPT:

      document.layerframe.document.layers.Nsub1.document.images[imageName].src = "../images/" + fileName + ".gif";

      gruss
      fant

      1. Hi,

        es will immernoch nicht.

        glaube ich Dir :-)

        mach ich das so korrekt?

        Nein:

        <div id="layerframe" style="position:relative;">

        Ich sehe hier kein name-Attribut.

        <div id="sub1" name="Nsub1" class="ueber-uns">

        Btw: In class="ueber-uns" wird das Ding positioniert, richtig? Ansonsten ist es für Netscape 4 kein Layer.

        document.layerframe.document.layers.Nsub1

        Hm, hier solltest Du ein wenig konsequenter werden...

        Cheatah

        1. ok nochmal schön ;-)
          ist halt durch ausprobieren alles ein wenig durcheinander...

          HTML:
          <div id="layerframe" name="layerframe" style="position:relative">
            <div id="sub1" name="sub1" class="ueber-uns">

          (... cp('img11','menudeutsch/ueberuns_1a','sub1'); ....)

          </div>
          </div>

          CSS:
          .ueber-uns
          {
            position:absolute;
            top:5px;
            left:8px;
            z-index:1;
            visibility:hidden;
          }

          JAVASCRIPT:
          function cp(imageName, fileName, layer)
          {
            document.layerframe.document.layers[layer].document.images[imageName].src = "../images/" + fileName + ".gif";
          }

          gruss
          fant

          1. Moin!

            CSS:
            .ueber-uns

            Klassen-Namen bitte ohne irgendwelche Striche und Unterstriche, nur Buchstaben und Zahlen! Ansonsten gibts Müll in den Browsern - die erkennen u.U. die Klasse nicht.

            Nur mal so kurz zwischenrein geworfen...

            - Sven Rautenberg

            1. das wars leider nicht....

              1. Hi,

                das wars leider nicht....

                ich vermisse eine aktuelle, nach Deinen Änderungen gültige Fehlerbeschreibung - und eine URL, bei der man das betrachten kann :-)

                Cheatah

                1. mach ich doch gerne ;-)

                  ich hab auch schon versucht den äusseren layer "layerframe" wegzunehmen. hat aber auch nicht funktioniert  und ich weiss dann nicht mehr wie ich die layers relativ positionieren kann.
                  die "id" und "name" heissen nun gleich ist das ein problem? habs auch schon umbenannt hat aber nichts genützt.

                  HTML:

                  <div id="layerframe" name="layerframe" class="rahmen">
                    <div id="sub1" name="sub1" class="ueberuns">
                    <a href="bienenberg.php?lang=d&text=100" onMouseOut="cp('bild11','menudeutsch/ueberuns_1','sub1');" onMouseOver="cp('bild11','menudeutsch/ueberuns_1a','sub1');"><img name="bild11" src="../images/menudeutsch/ueberuns_1.gif" width="77" height="26" border="0"></a><br>
                    </div>
                  </div>

                  CSS:
                  .rahmen
                  {
                    position:relative;
                  }

                  .ueberuns
                  {
                    position:absolute;
                    top:5px;
                    left:8px;
                    z-index:2;
                    visibility:hidden;
                  }

                  JAVASCRIPT:
                  function cp(imageName, fileName, layer)
                  {
                    if (NN4)
                    {
                      if (layer)
                      {
                        eval('document.layerframe.document.'+layer+'.document.'+imageName+'.src = "../images/'+fileName+'.gif"');
                      }
                      else
                        document.images[imageName].src = "../images/" + fileName + ".gif";
                    }
                    else // IE, NN6, OP
                    {
                      document.images[imageName].src = "../images/" + fileName + ".gif";
                    }
                  }

                  ich hab im javascriptteil auch schon alle möglichen schreibweisen durchprobiert.
                  javascript melden so auch keinen fehler mehr, aber das bild wird doch nicht gewechselt.

                  sonst kam immer der fehler:

                  "document.layerframe.document.sub3.document.bild13 has no
                  properties"

                  sub3: der layer der übergeben wird
                  bild13: der name img

                  gruss
                  fant

                  die URL der seite:
                  www.atticstudio.ch/bieni

                  1. Hi,

                    ich hab auch schon versucht den äusseren layer "layerframe" wegzunehmen.

                    ist es eigentlich der äußere oder der äußer_st_e Layer?

                    die "id" und "name" heissen nun gleich ist das ein problem?

                    Nein. Ein Problem ist nur, wenn die selbe ID mehrmals im Dokument auftaucht. Nicht für Netscape 4 zwar, aber ansonsten schon.

                    eval('document.layerframe.document.'+layer+'.document.'+imageName+'.src = "../images/'+fileName+'.gif"');

                    Hast Du eigentlich mal der Reihe nach alert(document.layerframe), alert(document.layerframe.document), alert(document.layerframe.document.layers[layer]) usw. probiert?

                    Und um einen blöden Gedanken zu beruhigen: Setz doch mal bitte testweise ein "window." vor das erste "document". Ach ja: eval() is evil(), Du solltest wann immer es geht darauf verzichten - in jeder Programmiersprache.

                    javascript melden so auch keinen fehler mehr, aber das bild wird doch nicht gewechselt.

                    Bist Du sicher (und ich meine: _sicher_), dass die Grafik-Ressource auch auf Deinem Server verfügbar ist und korrekt angezeigt werden kann?

                    die URL der seite:
                    www.atticstudio.ch/bieni

                    Eine URL beginnt mit dem Protokoll ;-) Allerdings finde ich da keinen solchen Code.

                    Cheatah