webForumDet fria alternativet

Måste klicka ett par gånger?!

JavaScript

2 svar · 216 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Jag har friserat till detta lilla visa/dölj-script så att det skall fungera med fler lager än ett. Problemet är att jag måste ibland klicka två gånger för att lagret skall visas.

<script language="Javascript">
var n=1
function hideShow(id){
n=n*-1; vis = (n==1)? "hidden" : "visible";
if(document.all){document.all("lager"+id+"").style.visibility=vis;}
if(document.getElementById){document.getElementById("lager"+id+"").style.visibility=vis;}
if(document.layers){document.layers["lager"+id+""].visibility=vis;}
}
</script>
</head>

<body>
<div id="lager1" style="visibility:hidden;">Testar1</div>
<div id="lager2" style="visibility:hidden;">Testar2</div>
<div id="lager3" style="visibility:hidden;">Testar3</div>
<a href="#" onClick="hideShow('1')">Test1</a>
<a href="#" onClick="hideShow('2')">Test2</a>
<a href="#" onClick="hideShow('3')">Test3</a>
</body>
Medlem sedan juni 20004 308 inlägg
#2

Du kollar aldrig i ditt script vad lagret har för aktuell status. Du bara växlar mellan visible/hidden, oavsett vilket lager det är och vad det redan är. Sedan kan IE returnera true (beroende på version) både på document.all och document.getElementById eftersom den stödjer båda DOM'erna. Detta anhjälps enkelt med "else if" istället för if. Till sist använder Netscape 4 show/hide istället för visible/hidden. Lade även till en "return false" i onClick eftersom du inte behöver använda länken i <a> :)

<script language="Javascript">
function hideShow(id){
if(document.all){document.all("lager"+id+"").style.visibility=(document.all("lager"+id+"").style.visibility=="visible")?"hidden":"visible";}
else if(document.getElementById){document.getElementById("lager"+id+"").style.visibility=(document.getElementById("lager"+id+"").style.visibility=="visible")?"hidden":"visible";}
else if(document.layers){document.layers["lager"+id+""].visibility=(document.layers["lager"+id+""].visibility=="show")?"hide":"show";}
}
</script>

<div id="lager1" style="visibility:hidden;">Testar1</div>
<div id="lager2" style="visibility:hidden;">Testar2</div>
<div id="lager3" style="visibility:hidden;">Testar3</div>
<a href="#" onClick="hideShow('1');return false;">Test1</a>
<a href="#" onClick="hideShow('2');return false;">Test2</a>
<a href="#" onClick="hideShow('3');return false;">Test3</a>
Medlem sedan nov. 20017 144 inlägg
#3

Tack, jag hittade ett du hade gjort som var bättre. :)

279 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)