systom: Netscape

Hallo,

ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?

Das Javascript (ausgelagert):

function farbe_zelle(id,farbe) {
   if (document.all)
      document.all[id].style.backgroundColor=farbe;
   else
      if (document.getElementById)
         document.getElementById(id).style.backgroundColor=farbe;
      else
         if (document.layers)
            document.layers[id].bgColor=farbe;
}

Die Tabellenzelle:

<a href="formel1.php" target="_self"

onMouseOver="farbe_zelle('Zelle1','#6386C7')"
onMouseOut="farbe_zelle('Zelle1','#2C4F90')">

<td id="Zelle1" style="position:relative" bgcolor="#2C4F90">

<font face="Arial" size="-1">Formel 1</font>

</td>

</a>

Danke schon mal im Voraus.

Tom

  1. Hallo,

    ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?

    Das Javascript (ausgelagert):

    function farbe_zelle(id,farbe) {
       if (document.all)
          document.all[id].style.backgroundColor=farbe;
       else
          if (document.getElementById)
             document.getElementById(id).style.backgroundColor=farbe;
          else
             if (document.layers)
                document.layers[id].bgColor=farbe;
    }

    Die Tabellenzelle:

    <a href="formel1.php" target="_self"

    onMouseOver="farbe_zelle('Zelle1','#6386C7')"
    onMouseOut="farbe_zelle('Zelle1','#2C4F90')">

    <td id="Zelle1" style="position:relative" bgcolor="#2C4F90">

    <font face="Arial" size="-1">Formel 1</font>

    </td>

    </a>

    Danke schon mal im Voraus.

    Tom

    Die CSS Struktur stimmt leider nicht überein, Du musst also browserabhängig reagieren (NS kennt z.B. "style" nicht).

    Der beste Weg (hab ich mal bei Macromedia gelernt) ist, abhängig vom Browser Scriptvariablen zu setzen und diese dann mit eval() aufzulösen.

    Beispiel (nicht getestet aber so funktioniert das Prinzip):

    // Browserabhängig initialisieren

    function init(){
      if (navigator.appName == "Netscape") {
        var layerRef="document.layers";
        var styleSwitch="";
      }else{
        var layerRef="document.all";
        var styleSwitch=".style";
      }
    }

    // Variablen mit eval() verwenden

    function farbe_zelle(id,farbe) {
      eval(layerRef+'["'+id+'"]'+styleSwitch+'.background-color="'+farbe+'"');
    }

    1. Danke erst mal. Hab aber noch nicht ganz verstanden. Muß ich außer dem Script noch was anderes beachten.

      Tom

    2. Hallo,

      Die CSS Struktur stimmt leider nicht überein, Du musst also browserabhängig reagieren (NS kennt z.B. "style" nicht).

      Das ist Quatsch. Dir ist bekannt, daß die aktuelle Netscape-Version 7.0 ist?

      Der beste Weg (hab ich mal bei Macromedia gelernt) ist, abhängig vom Browser Scriptvariablen zu setzen und diese dann mit eval() aufzulösen.

      Besser nie was von Macromedia abschauen ;-)
      Das Script von Tom ist wesentlich besser und funktioniert auch auf moderen Browsern, die nicht IE heißen. Außerdem ist eval() evil, und sollte nur verwendet werden, wenn es nicht anders geht.

      Beispiel (nicht getestet aber so funktioniert das Prinzip):

      // Browserabhängig initialisieren

      function init(){
        if (navigator.appName == "Netscape") {

      Funktioniert nur, wenn sich der Browser auch unter seinem richtigen Namen ausgibt, und das muß nicht sein.

      var layerRef="document.layers";

      NS7 wird in appName auch 'Netscape' stehen haben, document.layers kennt er trotzdem nicht (auch nicht document.all), wohl aber document.getElementById

      var styleSwitch="";
        }else{
          var layerRef="document.all";
          var styleSwitch=".style";
        }

      Es gibt auch andere,bessere Browser als NS4 und IE.
      Bei neuen Netscapes und Mozilla dürfte das Script komplett versagen und eine Fehlermeldung bringen.

      }

      // Variablen mit eval() verwenden

      function farbe_zelle(id,farbe) {
        eval(layerRef+'["'+id+'"]'+styleSwitch+'.background-color="'+farbe+'"');

      ^
      das wird nicht funktionieren

      }

      Ich empfehle dringend:
      http://selfhtml.teamone.de/dhtml/modelle/index.htm

      Gruß, Jan

  2. Hallo,

    Ich denke das Script ist soweit ok. Das Problem liegt im HTML-Teil.
    Eine Tabellenzelle darf m.E. nicht innerhalb von <a href=".."> </a> liegen.

    versuch das mal mit (nicht getestet):

    <td id="Zelle1" style="background: #2c4f90; cursor: pointer;" onMouseOver="farbe_zelle('Zelle1','#6386C7');" onMouseOut="farbe_zelle('Zelle1','#2C4F90');" onClick="window.location.href='formel1.php';">
    <a href="formel1.php">Formel 1</a>
    </td>

    Keine Ahnung, ob NS4 da mitmacht.

    Gruß, Jan

  3. Hallo,

    ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?

    [snip]

    <td id="Zelle1" style="position:relative" bgcolor="#2C4F90">

    Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.

    Struppi.

    1. Hallo Struppi,

      <td id="Zelle1" style="position:relative" bgcolor="#2C4F90">

      Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.

      Wo ist denn da ein Layer?

      Gruß, Jan

      1. Hallo Struppi,

        <td id="Zelle1" style="position:relative" bgcolor="#2C4F90">

        Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.

        Wo ist denn da ein Layer?

        Da:
        Das Javascript (ausgelagert):

        function farbe_zelle(id,farbe) {
           if (document.all)
              document.all[id].style.backgroundColor=farbe;
           else
              if (document.getElementById)
                 document.getElementById(id).style.backgroundColor=farbe;
              else
                 if (document.layers)
                    document.layers[id].bgColor=farbe;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        Struppi.

        1. Hallo,

          Wo ist denn da ein Layer?

          Da:
          Das Javascript (ausgelagert):

          function farbe_zelle(id,farbe) {
             if (document.all)
                document.all[id].style.backgroundColor=farbe;
             else
                if (document.getElementById)
                   document.getElementById(id).style.backgroundColor=farbe;
                else
                   if (document.layers)
                      document.layers[id].bgColor=farbe;
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

          Naja. Hier wird versucht mit JS einen Layer anzusprechen, den es aber nicht gibt.
          Wahrscheinlich kann man das ganze 'if(document.layers)...' weglassen, da das Verändern der HG-Farbe von Tabellenzellen in NS4 nicht funktioniert. (?)

          Gruß, Jan