muffinOTR: onMouseOver Problem

Hi,
ich bin gerade ein wenig am Verzweifeln. Und zwar versuche ich mit dem Event-Handler "OnMouseOver" mehrere Funktionen auszuführen. Doch leider erscheint bei mir folgender Java-Script-Fehler:

=== Fehlermeldung ====================================
'document.all[...].style' ist Null oder kein Obekt'

Warum erscheint dieser Fehler, wenn ich folgenden Quelltext habe?

=== Quelltext ========================================
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
var ie4 = (document.all) ? true : false;

function showLayer(layerName){
if (ie4) {document.all[layerName].style.visibility = "visible"}
}

function hideLayer(layerName){
if (ie4) {document.all[layerName].style.visibility = "hidden"}
}
</SCRIPT>
<style type="text/css">
#layer1 {position: absolute; z-index: 59900; visibility: hidden; left: 117px; top: 99px;}
#layer2 {position: absolute; z-index: 59900; visibility: hidden; left: 117px; top: 79px;}
#layer3 {position: absolute; z-index: 59900; visibility: hidden; left: 117px; top: 59px;}
</style>
</header>
<body>
<a href='#' onMouseOver="showLayer('layer1'); hideLayer('layer2'); hideLayer('layer3');">Irgendein Link</a>

<span id="layer1">Text 1</span>
<span id="layer2">Text 2</span>
<span id="layer3">Text 3</span>
</body>

Hat einer von Euch eine Lösung? Es wäre super klasse, wenn mir einer helfen könnt. Vielleicht stehe ich ja einfach nur auf dem Schlauch!?

Euch schon mal vielen Dank!

Gruss,
marc

  1. document.getElementById(layerName).style...

    Marco

    1. Hi Marco,
      vielen Dank für Deine schnelle Antwort,...

      document.getElementById(layerName).style...

      ...aber jetzt erscheint folgenden Fehlermeldung:

      === Fehlermeldung ====================================
      'document.getElementById[...].style' ist Null oder kein Obekt'

      gruss,
      marc

      1. dahinter muss noch was du ändern möchtest, z.B.:
        ...style.width = "200px";

        Marco

        1. dahinter muss noch was du ändern möchtest, z.B.:
          ...style.width = "200px";

          das mache ich ja hiermit: ...style.visibility = "visible"

          ich glaube das Problem liegt darin, dass ich mit dem OnMouseOver nicht mehrmals eine Funktion mit verschiedenen Variablen ausführen kann.

          Also: onMouseOver="showLayer('layer1'); hideLayer('layer2'); hideLayer('layer2');"

          Ist das möglich?

          gruss,
          marc

          1. »»'document.getElementById[...].style' ist Null oder kein Obekt'
            Heisst doch, du willst ein Element ansprechen das nicht definiert ist, check mal Deine Bezeichnungen.

            das mache ich ja hiermit: ...style.visibility = "visible"

            probier es doch auch mal alternativ mit display="none" und display="block"

            Ist das möglich?

            Ja, ist auf jeden Fall möglich!

            Gruss AndreD

            1. Hi AndreD, vielen Dank für Dein Antwort!

              »»'document.getElementById[...].style' ist Null oder kein Obekt'
              Heisst doch, du willst ein Element ansprechen das nicht definiert ist, check mal Deine Bezeichnungen.

              habe nochmal alles überprüft. alle Elemente sind definiert. die erste Funktion, also showLayer('layer1), führt er aus, doch bei der zweiten auszuführenden Funktion, also hideLayer('layer2'), bekommt er Probleme. Da zeigt er mir jetzt sogar als Fehlermeldung "Objekt erforderlich" an.

              das mache ich ja hiermit: ...style.visibility = "visible"
              probier es doch auch mal alternativ mit display="none" und display="block"

              es funktioniert beides!

              Ist das möglich?
              Ja, ist auf jeden Fall möglich!

              das wird es dann wohl leider sein! :-(

              1. Hi,

                dat kann doch nu nich so schwierig sein ;-)
                Nimm mein Script, das sollte ueberall funktionieren.
                Nutzt Du Nc 4x? Damit gehen natuerlich weder Dein Script, noch document.getElementById().

                Gruesse  Joachim

                <html>
                <head>
                <style type="text/css">
                #ebene0 {
                 position: absolute;
                 top: 100px;
                 left: 100px;
                 width: 200px;
                 height: 200px;
                 visibility: hidden;
                 background-color: red;
                 layer-background-color: red;
                 border: none;
                }
                </style>
                <script language="javascript1.2" type="text/javascript">

                // some known objects
                var nc   =  !!(document.captureEvents  && !document.getElementById);
                var ie4  =  !!(document.all            && !document.documentElement);

                // einfache div-layer referenzieren
                // !!!!!!!!! ACHTUNG HIER KEIN ZEILENUMBRUCH !!!!!!!!!!
                function dRefS(num) {return (nc? document.layers[num] : (ie4? document.all[num].style : document.getElementById(num).style))}

                function dpl(id, stat) {
                 dRefS(id).visibility =  stat? "visible" : "hidden";
                }
                </script>

                </head>

                <body marginheight="0" marginwidth="0">
                <a href="#" onmouseover="dpl('ebene0',1)" onmouseout="dpl('ebene0',0)">link</a>

                <div id="ebene0">Erstes Div</div>
                </body>
                </html>

                1. Hi Joachim,

                  dat kann doch nu nich so schwierig sein ;-)
                  Nimm mein Script, das sollte ueberall funktionieren.

                  Du hast vollkommen recht!!!! Einfach Perfekt! Es läuft einfach mit allen Browsern!!!! Herrlich!

                  Die super vielen Dank!

                  Gruss,
                  marc

      2. Marc,
        Haste auch runde Klammern hinter getElementById?
        Gunnar

        1. Ja, es sieht jetzt so aus:

          function showLayer(layerName){
           document.getElementById(layerName).style.visibility = "visible"
          }

          1. Ja, es sieht jetzt so aus:

            function showLayer(layerName){
             document.getElementById(layerName).style.visibility = "visible"

            Öhhh, mach doch bitte da mal ein Semikolon hin---------------------^

            AndreD