Jag undrar hur man gör för att dölja/visa ett lager genom att klicka på samma länk.
(Först visas det, och klickar man igen försvinner det.)
Det måste fungera i både NS oc IE.
Jag har sökt runt efter ett svar men hittar ingen som stämmer exakt.
...att jag har 3 olika länkar som funkar på samma sätt. (visar/döljer varsitt lager). Om jag vill att endast ett lager ska kunna vara synligt samtidigt.
Altså att när man trycker på en av länkarna döljs först de 2 andra lagrena.
Ok.
För att ändra synbarheten på ett lager i IE anropar man:
document.all("lagrets_namn").style.visibility="visible"/"hidden"
För NS4+ som har en annan lagerhantering blir det:
document.layers["lagrets_namn"].visibility="show"/"hide"
Och för NS6 och även IE5+ används:
document.getElementById("lagrets_namn").style.visibility="visible"/"hidden"
För att rätt modell skall användas måste vi fråga läsaren vad som skall användas:
if(document.all){document.all("lagrets_namn").style.visibility="hidden";}
Sålunda skulle en funktion som gömmer ett lager kunna se ut så här:
function hide(){
if(document.all){document.all("lagrets_namn").style.visibility=hidden;}
if(document.getElementById){document.getElementById("lagrets_namn").style.visibility=hidden;}
if(document.layers){document.layers["lagrets_namn"].visibility=hide;}
}
För att slippa skriva "lagrets_namn" varje gång och slippa ha en funktion per lager, kan man skicka med namnet som en variabel när man anropar funktionen.
Anropet:
<a href="javascript:show('lager1')">visa 1</a>
och funktionen:
function show(vilket){
if(document.all){document.all(vilket).style.visibility=visible;}
if(document.getElementById){document.getElementById(vilket).style.visibility=visible;}
if(document.layers){document.layers[vilket].visibility=show;}
}
Där vilket ersätts av det man skickade med vid anropet.
Vill man starta fler funktioner med samma knapptryck lägger man bara till anrop:
<a href="javascript:show('lager1');show('lager2');show('lager3')">visa alla</a>
Dina funktioner hide() och show() skulle kunna se ut så här:
function hide(vilket){
if(document.all){document.all(vilket).style.visibility=hidden;}
if(document.getElementById){document.getElementById(vilket).style.visibility=hidden;}
if(document.layers){document.layers[vilket].visibility=hide;}
}
function show(vilket){
if(document.all){document.all(vilket).style.visibility=visible;}
if(document.getElementById){document.getElementById(vilket).style.visibility=visible;}
if(document.layers){document.layers[vilket].visibility=show;}
}
Hej, så här gör jag, funkar i NS4+ (inkl nästlade lager), IE4+, NS6 och Opera5:
Släng upp koden i en webbläsare och testa, kolla sen på koden så bör du hänga med på hur den funkar.
Läs kommentarerna för att se vad varje del gör (allt med // framför är kommentar)
<html>
<head>
<title>--- ett testscript...--- </title>
<SCRIPT LANGUAGE="Javascript">
<!--//
// Laddar om sidan då man ändrar storlek, men bara om det är Netscape 4
function reLoad(){
if(document.layers){
location.reload();
}
}
// skapar en referens till det namngivna lagrets olika egenskaper, tar emot följande: lagrets id samt det lager som lagret du vill påverka ligger i om det är nästlat (typ tabell i tabell men lager)det omgivande lagrets id är frivilligt.
function getObj(name, nest) {
if (document.getElementById)
return document.getElementById(name).style;
else if (document.all)
return document.all[name].style;
else if (document.layers)
if (nest != ''){
return eval('document.'+nest+'.document.layers["'+name+'"]');
}else{
return document.layers[name];
}
}
//Visar ett lager genom att spara referensen till lagrets egenskaper i "x", lägga till egenskapen visibility och sen sätta den till visible.
function showLayer(layerName, nest){
var x = getObj(layerName, nest);
x.visibility = "visible";
}
//Gömmer ett lager genom att spara referensen till lagrets egenskaper i "x", lägga till egenskapen visibility och sen sätta den till hidden.
function hideLayer(layerName, nest){
var x = getObj(layerName, nest);
x.visibility = "hidden";
}
//-->
</SCRIPT>
</head>
<body onResize="javascript:reLoad();">
<DIV ID="NewsDrop" STYLE="position:absolute; z-index:2; left:100px; top:24px; visibility:hidden;">
Lager med id NewsDrop
</DIV>
<DIV ID="NewsDrop1" STYLE="position:absolute; z-index:2; left:100px; top:50px; visibility:hidden;">
Lager med id NewsDrop1
</DIV>
<BR><BR><BR><a href="javascript:showLayer('NewsDrop','');hideLayer('NewsDrop1','');">Visa lagret NewsDrop</a>
<BR><BR>
<a href="javascript:showLayer('NewsDrop1');hideLayer('NewsDrop');">Visa lagret NewsDrop1</a>
<BR><BR>
För att starta med lagren osynliga måste du i DIV-taggen ange visibility:hidden som i exemplet ovan, det är den egenskapen som du sen påverkar med scriptet.
</body>
</html>
Lycka till!
Dan
------------------
Freedom without discipline is chaos. Discipline without freedom is tyranny. DmSProject
[Redigerat av DmS den 12 apr 2001]
262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849