Layer erscheinen, verschwinden aber nicht mehr
Sabine
- javascript
0 Ole0 Sabine
0 Worrel0 Sabine
0 Sven Rautenberg
Hallo!
Ich habe ein JavaScript-Problem - ich kann mit meinem Skript zwar divs erscheinen lassen, aber sie verschwinden dann nicht mehr. Zur Vorinformation: Skript ist momentan nur mit MSIE 6.0 getestet.
Würde mich freuen, wenn ihr vielleicht einen Tipp für mich habt, was ich falsch gemacht habe bzw. wie man das besser lösen könnte. Bitte Entschuldigung für den langen Quellcode, habe ihn zwar gekürzt, trotzdem ist noch einiges übriggeblieben:
Das Skript:
Funktion menu zeigt jeweils das gewünscht menu-div an und blendet die anderen aus.
Funktion clean: alle divs verstecken
Funktion submenu: Im Div-Menu eingebundene sub-divs anzeigen.
<script language="JavaScript" type="text/javascript">
<!--
function menu (i)
{
switch(i)
{
case 1:
{
if ((navigator.appName=='Netscape') && (navigator.appVersion.charAt(0)<'5'))
{
window.document.menu1.style.left = document.images[0].offsetLeft+20;
window.document.menu1.style.top = document.images[0].offsetTop+50;
window.document.menu1.visibility="show";
window.document.menu2.visibility="hide";
window.document.sub21.visibility="hide";
window.document.sub22.visibility="hide";
return;
}
if (navigator.appVersion.charAt (0)<'5')
{
var layers=document.all.tags ("div");
}
else {
var layers=document.getElementsByTagName("div");
}
layers[0].style.left=document.images[0].offsetLeft+20;
layers[0].style.top=document.images[0].offsetTop+50;
layers[0].style.visibility='visible';
layers[4].style.visibility='hidden';
layers[5].style.visibility='hidden';
layers[6].style.visibility='hidden';
return;
}
case 2:
{
hier stehen genau die umgekehrten Zuweisungen wie in case 1, menu1 mit allen darin enthaltenen Layern wird versteckt und menu2 angezeigt.
}
}
}
function clean ()
{
if ((navigator.appName=='Netscape') && (navigator.appVersion.charAt(0)<'5'))
{
window.document.menu1.visibility="hide";
window.document.sub11.visibility="hide";
usw ... alles wird versteckt
return;
}
if (navigator.appVersion.charAt (0)<'5')
{
var layers=document.all.tags ("div");
}
else {
var layers=document.getElementsByTagName("div");
}
layers[0].style.visibility='hidden';
layers[1].style.visibility='hidden';
usw ... alles wird versteckt
return;
}
function submenu (i)
{
switch(i)
{
case 11:
{
window.clearInterval("submenu(11)");
if ((navigator.appName=='Netscape') && (navigator.appVersion.charAt(0)<'5'))
{
window.document.sub11.visibility="show";
return;
}
if (navigator.appVersion.charAt (0)<'5')
{
var layers=document.all.tags ("div");
}
else {
var layers=document.getElementsByTagName("div");
}
layers[1].style.visibility='visible';
return;
}
... analog für die anderen cases
}}
//-->
</script>
HTML-Teil:
Die Div-Menüs mit eingebundenen sub-divs:
<div id="menu1" class="menu" style="position:absolute;left:0px;top:0px;z-index:0;visibility:hidden" onmouseover="menu(1);submenu(11);submenu(12)" onmouseout="clean()">
<div id="sub11" class="submenu" style="position:relative;top:0px;left:10px;visibility:hidden">Information</div>
<div id="sub12" class="submenu" style="position:relative;top:0px;left:25px;visibility:hidden">Programmauszug</div>
</div>
... analog dazu menu2 mit den sub-divs.
Der Aufruf - korrespondierendes menu-div anzeigen, submenus zeitversetzt anzeigen und die anderen menu-divs verstecken.
<a href="#" onmouseover="menu(1);setInterval('submenu(11)',150);setInterval('submenu(12)',300)" onmouseout="clean()"><img src="b_red_pro.gif" alt="" border=0/></a>
… analoger Aufruf der anderen Layer.
Wie gesagt, die Anzeige, das Erscheinen klappt wunderbar. Allerdings lassen sich die divs nicht mehr verstecken. Weder bei mouseover auf ein anderes Bild noch bei mouseout beim entsprechenden div.
Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt. Danke im Voraus für jede Hilfe.
Schöne Grüße
Sabine
hi sabine
ich kann dir vieleicht nicht direkt bei deinem script helfen, aber ich habe auch mal eins cript zum zeigen und verstecken von divs gebastelt.
vieleicht hilft dir das ja weiter.
zu finden unter:
http://www.novameierhenrich.de/version4/
so long
ole
(8-)>
Hi Ole!
ich kann dir vieleicht nicht direkt bei deinem script helfen, aber ich habe auch mal eins cript zum zeigen und verstecken von divs gebastelt.
:) Ich will auch nicht direkt ein Script. Danke für den Link, es hilft mir aber leider nicht weiter. Wie schon im vorigen Posting - grundsätzlich habe ich mit Ein-Ausblenden der Layer kein Problem, allerdings bei diesem Skript mit der Zeitsteuerung und Verschachtelung.
Liebe Grüße
Sabine
Hallo,
Ich habe die unterschiedlichen Browser über deren Fähigkeiten abgefragt und danch den Verschwindenbefehl ausgewählt:
1 trifft für IE zu, 2 für NS 4.x, 3 für Opera >5 und NS > 6
(1) if (document.all) {
document.all['menu1'].style.visibility='hidden';
}
(2) if (document.layers) {
document.menu1.visibility='hidden';
}
(3) if (document.getElementById) {
document.getElementById("menu1").style.visibility = "hidden";
}
Gruß, Worrel
Hallo Worrel!
Danke für die Info. Es ist so, dass mein Script grundsätzlich funktioniert. Grundsätzlich heißt: Ich habe es schon öfter eingesetzt (ohne Probleme), allerdings in diesem Script nun das erste Mal die Zeitsteuerung sowie die getrennte Anzeige der einzelnen Sub-divs, die in jeweils ein menu-div eingepackt sind.
... und seither lassen sich die divs nur mehr ein- nicht aber mehr ausblenden.
Würde mich freuen, wenn du noch einen Tipp hast!
Schöne Grüße
Sabine
Moin!
Auch ich werd' dir nicht wahnsinnig viel weiterhelfen, aber einen dringenden Kommentar habe ich:
function menu (i)
{
switch(i)
{
case 1:
{
if ((navigator.appName=='Netscape') && (navigator.appVersion.charAt(0)<'5'))
Grausam, diese Browserabfrage. Wenn du wissen willst, wie du auf Layer zugreifen mußt, dann frage doch einfach alle relevanten Zugriffsobjekte auf Existenz ab - geht IMO schneller und schöner und ist außerdem nicht ganz so gräßlich fehlerbehaftet, sollte ein anderer Browser als Netscape 4 sich irrtümlich als ein solcher ausgeben (wie zum Beispiel Opera, wenn man will und es so einstellt).
Also stattdessen einfach
if (document.layers)
und fertig ist der Lack. Das funktioniert dann nämlich nur im Netscape 4, und nicht auch noch in Netscape 3, 2 und 1 (wenngleich die nicht mehr so rasend häufig auftreten :) ).
Ansonsten gibts von mir nur die üblichen Fehlerbehebungs-Tipps:
1. Gibts Fehlermeldungen? Du weißt hoffentlich, wie man die zu Gesicht bekommt, oder? Die Abwesenheit einer Dialogbox bedeutet nicht, daß es keine Fehlermeldung gibt. Nimm Netscape (egal, ob 4, 6 oder 7) und dessen Javascript-Konsole zur Hilfe.
2. Baue Alert-Meldungen in den Code ein, um zu sehen, ob die Teile, die ausgeführt werden _sollen_, auch tatsächlich ausgeführt _werden_. Also insbesondere vor oder nach dem Verstecken-Teil sollte ein Alert stehen. Wenn eines von beiden oder beide nicht ausgeführt werden, hast du den Fehler eingekreist.
Im übrigen hilft es bei Fehlerfragen in diesem Forum wesentlich mehr, wenn du die fragliche Seite nicht komplett postest, sondern online stellst, damit man sie sich in Aktion ansehen kann. Und es hilft auch nicht, wenn du sie _fast_ komplett postest, aber dann doch ein paar Zeilen wegkürzt, weil da vielleicht der Fehler nicht drin ist. Entweder bei großen Seiten den Code radikal kürzen, gucken, ob er den Fehler immer noch produziert, und ihn dann hier posten, oder ungekürzt online stellen - das hilft, alles andere nicht.
- Sven Rautenberg