Avatar billede strandgaard Nybegynder
09. marts 2004 - 18:42 Der er 12 kommentarer og
1 løsning

show/hide layer i en anden frame ved onclick

Hejsa Eksperter

Efter at have læst et hav af spg. her på siden, har jeg ikke lige fundet noget der afhjalp mit problem, eller også har jeg bare ikke fattet at få det indarbejdet ;-) Derfor håber jeg på et simpelt svar og overbærenhed med en nybegynder i html.

Problemet er at jeg har lavet min hjemmeside i frames (top,buttom og left, main, right). I left frame er der en menu med knapper, der ved onclick gerne skulle åbne (show/hide) et tilhørende layer i main frame. Det skulle gerne laves sådan, da der i main frame ligger et baggrundsbillede der derved ikke skal loades hver gang der trykkes på knapperne i left frame (eller det var ihvertfald meningen at det skulle undgås herved). Men jeg kan ikke finde ud af at få mine layers frem i main frame'en og jeg ved heller ikke hvor de forskellige stumper kode skal ligges ind. øhh, og så lige et tillægs spg. da baggrundsbilledet i main frame kun skal vises en gang skulle det gerne være muligt at scrolle i de layers der åbnes med knapmenuen, således at man bliver ved med at kunne se baggrundsbilledet.

Håber jeg har gjort problemet forståeligt, men ellers skriv for kode eller uddybende svar.
Avatar billede strandgaard Nybegynder
09. marts 2004 - 18:45 #1
uddybende forklaring selvfølgelig....håber på at få svaret ;-)
Avatar billede grunken Nybegynder
09. marts 2004 - 19:07 #2
<a href="#" onclick="top.frames.main.document.getElementById('laget').style.visibility='visible';return false">

i mainframen skal dit lag så se sådan her ud!

<div id="laget" style="overflow:auto;visibility:hidden;">Indhold</div>

Men jeg går ud fra at når du vil vise et "lag", så skal de andre "lag" der er aktive indholdsframen også skjules, så derfor kunne man lave en lille funktion


function skiftside(lag){
elm = top.frames.main.document.getElementsByTagName("DIV")
for(i=0;i<elm.length){
  if(elm[i].id==lag)
  elm[i].style.visibility="visible";
  else
  elm[i].style.visibility="hidden";
}
}

Og denne aktiveres så bare vha. et link i left med

<a href="#" onclick="skiftside('laget');return false">Menupunkt</a>

Hvis dette ikke er hvad du mener, må du gerne uddybe lidt mere :o)
Avatar billede strandgaard Nybegynder
09. marts 2004 - 19:29 #3
jeg skal lige spise, så afprøver jeg det lige.... :-)
Avatar billede strandgaard Nybegynder
09. marts 2004 - 19:52 #4
Der sker ikke noget når jeg har sat det første <a href..... ind i min left frame ved knapperne og oprettet laget i min main frame.... jeg ved ikke helt hvad jeg skal med det nederste. Er funktionen et javascript, eller hvor og hvordan skal det indføres.


Meningen er, at jeg i main har et baggrundbillede der skal forblive fastlåst, og alt efter hvilken knap man trykker på i left frame, så skal det tilsvarende lag sættes til show og de andre til hide, således at den tekst mv. der ligger på laget ligger sig ind over baggrundsbilleder i main frame. Blev det klarere, eller var det bare det samme vrøvl med nye ord?
Avatar billede grunken Nybegynder
09. marts 2004 - 20:52 #5
1. er vi enige om at din main frame vitterligt hedder "main" ? , ellers skal dette ændres til det din frame hedder :o)

hvis ja burde overnstående eksempel fungere til ug :o)

nr 2 er en funktion, den ligges mellem head & head i din "menuframe"

sådan:

<script type="text/javascript">
function skiftside(lag){
elm = top.frames.main.document.getElementsByTagName("DIV")
for(i=0;i<elm.length){
  if(elm[i].id==lag)
  elm[i].style.visibility="visible";
  else
  elm[i].style.visibility="hidden";
}
}
</script>

der hvor der nu står 'laget' kan du indsætte et hvilkensom helst lagnavn på et lag i din "mainframe", og funktionen vil automatisk "lukke" alle de lag som ikke er relevante!

<a href="#" onclick="skiftside('laget');return false">Menupunkt</a>

- og sidst men ikke midst så hjalp den seneste forklaring ikke synderligt, hvis ovenstående ikke er løsningen, så er jeg nok nødt til at se et eksempel :o)
Avatar billede strandgaard Nybegynder
09. marts 2004 - 21:47 #6
Jeg prøver lige at lave en simpel test, for at se om det er noget andet på min side der gør at den melder fejl. Den skriver ihvertfald stadig at der opstår en fejl på siden. Jeg ved ikke om det er fordi jeg har andre javascripts på siden. Jeg vender tilbage når jeg lige har testet det.

Forresten så har jeg lige et par opklarende spørgsmål. 

1. Hvad gør den her linie elm = top.frames.main.document.getElementsByTagName("DIV")
og især hvad betyder top ?
2. Hvad sker der når man anvender href="#"
3. Hvorfor return false ved onclick?
og sidst men ikke mindst
4. Min knapmenu med mere er lavet i et layer, vil de også blive lukket, hvis jeg bruger den funktion du har skrevet, som lukker de andre layers, eller kan det styres med ID ?
Avatar billede strandgaard Nybegynder
09. marts 2004 - 21:58 #7
Har lige prøvet at lave et helt simpelt eks. med en left og en main frame, et lag i main frame, og et anchor (eller hvad det nu hedder) i left frame, men den melder stadig at der opstod en fejl på siden. Kan det være en opsætning i IE, der gør at jeg ikke kan se det, når jeg er offline. Jeg bruger dreamweaver, og trykker F12 for at se det i IE.

I left frame:

<head>
<title>left</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
function skiftside(lag){
elm = top.frames.main.document.getElementsByTagName("DIV")
for(i=0;i<elm.length){
  if(elm[i].id==lag)
  elm[i].style.visibility="visible";
  else
  elm[i].style.visibility="hidden";
}
}
</script>
</head>
<body>
<a href="#" onclick="skiftside('laget');return false">Menupunkt</a>
</body>
</html>

I main frame:

<html>
<head>
<title>main</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<div id="laget" style="overflow:auto;visibility:hidden;">Indhold</div>
</body>
</html>

og i hovedfilen:

<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<frameset cols="80,*" frameborder="no" border="0" framespacing="0">
  <frame src="left.htm" name="left" scrolling="No" noresize="noresize" id="left" />
  <frame src="main.htm" name="main" id="main" />
</frameset>
<noframes><body>
</body></noframes>
</html>
Avatar billede grunken Nybegynder
09. marts 2004 - 22:06 #8
prøver at besvare kort på dine spørgsmål :o)

elm = top.frames.main.document.getElementsByTagName("DIV")

Sætter en variabel indeholdende alle dine lag i din "main"-frame
(top er det øverste dokument, oversat til dit framesæt)

href="#"

et tomt link, og i samarbejde med "return false" sørger det for at intet ud over tingen der står i onclick-eventen bliver udført!

Din knapmenu ligger forhåbentligt i et lag i din "left"-frame, og vil derfor ikke blive berørt af ændringerne i din main-frame

Sidst men ikke mindst hvad for nogle fejl får du returneret ??
Avatar billede grunken Nybegynder
09. marts 2004 - 22:13 #9
Og fejlen var at jeg vist lige havde glemt en defination i forløkken :o)

sådan skal den se ud:

<script type="text/javascript">
function skiftside(lag){
elm = top.frames.main.document.getElementsByTagName("DIV")
for(i=0;i<elm.length;i++){
  if(elm[i].id==lag)
  elm[i].style.visibility="visible";
  else
  elm[i].style.visibility="hidden";
}
}
</script>
Avatar billede strandgaard Nybegynder
09. marts 2004 - 23:03 #10
Det hjalp sgu' ihvertfald på min testside, så jeg prøver om jeg ikke lige kan få det til at funke på den rigtige side også....

Hvis du smider et svar skal jeg se om jeg kan finde ud af at give dig pointene, ellers må du også gerne hjælpe med det :-)
Avatar billede grunken Nybegynder
09. marts 2004 - 23:40 #11
Det plejer nu ikke at være så besværligt.... :o)

hvis det skaber sig yderlige må du jo lige sige til :-)
Avatar billede strandgaard Nybegynder
10. marts 2004 - 01:27 #12
Fik du pointene?

Jeg har fået det til at virke på min rigtige side også... så det er bare kanon, tusind tak for hjælpen ;-)
Avatar billede grunken Nybegynder
10. marts 2004 - 20:21 #13
velbekomme :o)

Jeg fik points, så alt er i den skønneste orden :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester