Sven Rautenberg: Dynamischer Funktionsaufruf

Beitrag lesen

Moin!

ich möchte mit einem onmouseover /out einen Schriftstyle in einem Layer ändern.
Ich übergebe also beim Funktionsaufruf den Layernamen als Variable und möchte das in der Fkt. folgendes ausgeführt wir:
Variable.style.fontsize
Variable.style.visibility

Das ist im Prinzip nicht schlecht, muß aber lediglich W3C-DOM- und IE-DOM-kompatibel angebunden werden. Netscape 4 kann Layer anzeigen und verstecken, aber garantiert keine Schriftgröße ändern. Aber das brauchst du auch ganz sicher nicht...

aber entweder liegt es am falschen syntax oder an weis ich nicht, es geht nicht. Ich benötige aber die dynamik da diese Fkt. an die 150 mal aufgerufen werden soll. Und wie kann ich die unterschiedliche Syntax der Browser IE und NN bewältigen?

Hier mal zwei Funktionen, um Layer zu zeigen und zu verstecken. Du übergibst die Layerid des DIV.

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
v6 = (document.getElementById)? true:false

function showlayer(layerid)
  {
  if (ns4) document.layers[layerid].visibility = "show"
  else if (v6) document.getElementById(layerid).style.visibility = "visible";
  else if (ie4) document.all[layerid].style.visibility = "visible"
  }

function hidelayer(layerid)
  {
  if (ns4) document.layers[layerid].visibility = "hide"
  else if (v6) document.getElementById(layerid).style.visibility = "hidden";
  else if (ie4) document.all[layerid].style.visibility = "hidden"
  }

Die Sache mit der Schriftgröße würde ich lassen. Damit willst du vermutlich, daß der Layer kleiner wird und der freiwerdende Platz durch Aufrücken der anderen Layer nach oben genutzt wird. Klappt aber mit Sicherheit nicht, weil die Browser durch das Verstecken die Seite nicht neu rendern (und die Positionen der Layer neu ausrechnen). Da mußt du dann schon irgendwie die Layerposition selbst ausrechnen und verändern.

Die Position eines Layers setzen geht z.B. so:

funktion poslayer(layerid,posX,posY)
{
  if (ns4)
    { // Positioning for Netscape
    document.layers[layerid].pageX=posX;
    document.layers[layerid].pageY=posY;
    }
  else if (ie4)
    { // Positioning for Internet Explorer
      // IE for Mac needs the 'px' String!
    document.all[layerid].style.left = posX+'px';
    document.all[layerid].style.top = posY+'px';
    }
  else if (v6)
    { // Positioning for other Browsers
    document.getElementById(layerid).style.left = posX;
    document.getElementById(layerid).style.top = posY;
    }
}

Anbei meine jetzigen Versuche:

...die ich gerne kommentiere, damit du lernst:

<script language="JavaScript">
<!--
function on(i)  <!-- Fkt on(), i kommt vom Fkt-aufruf -->

Javascript-Kommentare sind
  // Kommentarzeile bis zum Ende
  /* Kommentarbereich
     der auch über
     mehrere Zeilen gehen kann
  */

{
   z = i; //  z = i

Hier weist du der Variablen z den Inhalt von i zu. Das macht dann Sinn, wenn du z oder i hinterher veränderst, und den Originalinhalt behalten willst. Meist ist es aber sinnvoll, das gleich mit einer echten Rechenoperation zu verbinden - geht dann schneller. ;)

z = z+'.style.visibility'; // String popX.style.visibility wird erzeugt

Wenn du hier einfach z = i+'....'; geschrieben hättest, könntest du die obere Anweisung sparen. Doch leider ist alles sinnlos, denn...

z = new Object(); // Versuch String in ein Objekt umzuwandeln

...hier löschst du den Inhalt der Variablen, und ersetzt ihn durch den Inhalt eines Objektes. Das Objekt selbst lebt aber auch nicht lange, denn...

z = "visible"; // zuweisung popX.style.visibility = "visible"

...es wird hier schon wieder gelöscht und durch einen String mit dem Inhalt "visible" ersetzt.

i = i+'.style.fontSize'; // selbes vorgehen wie oben mit fontSize

Jetzt kommt i dran, ein String wird angehängt...

i = new Object();

... dann gelöscht und durch ein Objekt ersetzt, welches...

i = "12";

ebenfalls sofort wieder gelöscht wird, um durch einen String ersetzt zu werden.

}

Ich muß dir nicht erklären, daß deine Funktion off() genauso blödsinnig arbeitet. :) Funktionierende Beispiele sind oben ja dabei.

- Sven Rautenberg