Problem mit Anzeige / Verstecken von Ebenen
Michael Klose
- javascript
Hallo,
Ich gebe in einem eingebetten Frame die Seiten meiner Homepage aus.
In der zentralen Datei, die letztendlich für den Seitenaufbau sorgt, werden im Body-Tag die zwei Div-Bereiche "Hoch" (Hochscrollen, Sprung zum Seitenanfang) und "Runter" (Runterscrollen, Sprung zum Seitenende) eingerichtet:
onload="Layer_einrichten ('Hoch', 'Runter'); Navigation_ausgeben ()"
Die Funktionen zum Anzeigen / Verbergen der Ebenen sind wie folgt definiert:
var bName = navigator.appName;
var bVer = parseInt (navigator.appVersion);
var NS4 = (bName == "Netscape" && bVer >= 4);
var IE4 = (bName == "Microsoft Internet Explorer" && bVer >= 4);
function Layer_einrichten (Layer_1, Layer_2)
{
if (NS4)
{
objekt1 = eval ("document." + Layer_1);
objekt2 = eval ("document." + Layer_2);
}
if (IE4)
{
objekt1 = eval ("document.all." + Layer_1 + ".style");
objekt2 = eval ("document.all." + Layer_2 + ".style");
}
}
function Layer_verstecken (Layer)
{
if (NS4)
Layer.visibility = "hide";
if (IE4)
Layer.visibility = "hidden";
}
function Layer_anzeigen (Layer)
{
if (NS4)
Layer.visibility = "show";
if (IE4)
Layer.visibility = "visible";
}
Die Funktion "Navigation_ausgeben" schaut folgendermassen aus:
function Navigation_ausgeben ()
{
Layer_verstecken ("Hoch");
if (document.body.scrollHeight < document.body.clientHeight)
Layer_verstecken ("Runter");
else
Layer_anzeigen ("Runter");
}
Diese Funktion soll nun prüfen, ob die geladene Seite grösser als der Anzeigebereich ist und entsprechend den Div-Bereich "Runter" anzeigen bzw. verbergen. Standardgemäss soll der Div-Bereich "Hoch" versteckt sein, da man sich ja beim Seitenaufruf immer am Seitenanfang befindet.
Nun ist es aber so, dass beide Div-Bereiche angezeigt werden, d.h. meine Initialisierung greift nicht.
Was habe ich falsch gemacht ?
Danke für Eure Hilfe.
Michael
Halihallo Michael
function Layer_einrichten (Layer_1, Layer_2)
{
if (NS4)
{
objekt1 = eval ("document." + Layer_1);
objekt2 = eval ("document." + Layer_2);
}if (IE4)
{
objekt1 = eval ("document.all." + Layer_1 + ".style");
objekt2 = eval ("document.all." + Layer_2 + ".style");
}
}
Was bringt dir das Zeug hier? - Die Funktion macht für deinen
Kontext so ziemlich gar nichts... Irgendwas wird mit dem bösen eval
zu was anderem gemacht. Dieses andere etwas trägt wahlweise die Namen
objekt1 und objekt2 und werden nirgendwo sonst wieder verwendet =>
die Funktion ist zu nix zu gebrauchen und ich sehe deren Sinn
überhaupt nicht ein...
function Layer_verstecken (Layer)
{
if (NS4)
Layer.visibility = "hide";if (IE4)
Layer.visibility = "hidden";
}
schreib hier mal ein
alert(typeof Layer);
rein und staune: Du übergibst einen String und dieser kennt kein
Property ".visibility"!
function Layer_anzeigen (Layer)
{
s. oben.
}
function Navigation_ausgeben ()
{
Layer_verstecken ("Hoch");if (document.body.scrollHeight < document.body.clientHeight)
Layer_verstecken ("Runter");
else
Layer_anzeigen ("Runter");
}
s. oben: Du übergibst einen String und kein HTMLElement (div).
Schreib z.B. so:
Layer_verstecken(document.all["Hoch"].style);
Wenn object1 und object2 im Script global sind geht sogar:
Layer_verstecken(object1); // das geht dann für alle deine
// unterstützten Browser (IE und NS4)
dann gehts zumindest auf dem IE. Verallgemeinere das Prozedere, dann
gehts auf IE und NS4 (4! - Nicht 6, nicht 7!). Und erweitere das
ganze um die Unterstützung für DOM-fähige Browser (IE6,NS6,NS7, und
viele mehr) und dann ist die Lösung halbwegs gut.
Nun ist es aber so, dass beide Div-Bereiche angezeigt werden, d.h. meine Initialisierung greift nicht.
string.visibility ist keine Eigenschaft von string und hat mit der
Sichtbarkeit des Layers herzlich wenig zu tun.
Viele Grüsse
Philipp