1.
Inledning
2. Self, frame, top och parent 3. Fönsterreferens 4. Skriv ut frames 5. Uppdatera två frames samtidigt 6. Övningar Obs! 1. InledningPå de två föregående sidorna om fönster har jag visat några enkla kommandon för att öppna, anpassa, placera och hänvisa till fönster. Här skall jag bygga vidare på dessa kunskaper och arbeta med frames. Känner du dig osäker på frames kan du börja med att läsa min sida om frames i Html-sektionen. Gå dit > 2. Self, frame, top och parentDessa begrepp känner du igen från Html-koden. De används även i JavaScript. Det är därför bra att känna till hur de fungerar.
Det dokument som laddas i fönstret (med <body>) kallas för document. I många fall blir här window, self och document samma sak och det räcker oftast med att man anger dokumentobjektet, document, och sedan de objekt som finns under det. När man arbetar med frames ser saken lite annorlunda ut, som bilden nedan visar.
Ifall man inte har nästlade frames så är alltså top och parent samma sak. De saknar dokumentobjekt, som du ser i bilden. I stället har de barn (child) som skapas med <frameset>. Dessa objekt är fönsterobjekt, som var för sig benämns antingen med frame eller med det namn man gett dem i Html-koden. Båda fönstren pratar dock med sig själva som window. De har var sitt dokumentobjekt, vilket laddas med <frame>-elementen. Hela hierarkin blir således: top - parent - window - document. 3. FönsterreferensSå länge ett objekt, variabel, funktion, osv, endast används i ett dokument i ett och samma fönster, behöver man inte bekymra sig om fönsterreferens. Men så fort man vill gå utanför ett fönster (window) måste man tänka på vad det är man hänvisar till. på förra sidan visade jag ett exempel på hur viktigt detta är. Se avsnitt 9 och 10. Läs mer >
A. Child - Parent B. Parent - Child C. Child - Child De vanligaste typerna av referens är A och C. För referenser av typen A gäller syntaxen enligt följande: parent.Funktion...osv... Här anropas scriptet i parent och detta är ofta ett enkelt och effektivt sätt att utnyttja det första fönstret på. Genom att scriptet ligger där kan alla underordnade fönster nå det. För referenser av typen B gäller följande syntax: window.frame1.form1...osv...
eller I första fallet använder man det namn fönstret (child) fått. Det läggs efter window, som parent-fönstret kallar sig själv. På andra raden är "frames[0]" en array (en slags lista) över de frames som finns under parent och siffran inom hakparentserna anger vilken av dessa i listan som avses. Detsamma gäller sedan för forms[0]. För referenser av typen C gäller följande syntax: parent.frame1.form1...osv...
eller Först anropar man alltså parent och därefter den frame man vill nå. Man får se upp med att dokumentet i den frame man anropar har laddats, annars får man scriptfel. Det finns en särskild händelsehanterare för att undvika detta som heter "onLoad". Exempel 1 <frameset cols="50%,50%"> + <script language="JavaScript"> Titta på exemplet i praktiken > Scriptet gör så att namnet på fönstret skrivs ut i dokumentet. Scriptet gäller för vänstra fönstret. För det högra måste "frames[0]" ändras till "frames[1]". Exempel 2 <frameset cols="50%,50%"> + Vänstra fönstret: Högra fönstret: Titta på exemplet i praktiken > Vad som händer är att texten i det vänstra fönstret flyttas till textfältet i det högra. Det är möjligt tack vare referens till rätt objekt i rätt fönster. Exempel 3 <frameset cols="30%,70%"> + Vänstra fönstret: Titta på exemplet i praktiken > I vänstra fönstret visas en rullgardinsmeny, där besökaren kan välja en färg. Tack vare kommandot onChange kan färgen aktiveras i det högra fönstret. Kommandot "this.options[this.selectedIndex].value" skrivs ibland så här: "this.options.value". Men så som jag skrivit det ökar kompatibiliteten så att fler webbläsare förstår att "this" faktiskt avser select-objektet i just detta formulär. 4. Skriva ut framesMed metoden print() skrev vi på förra sidan ut ett fönster. Då man använder frames kan man tillämpa samma metod på enskilda fönster, men hur bär man sig åt för att skriva ut samtliga fönster på samma papper? Det är faktiskt inga problem, tack vare fönsterreferensen: Exempel 4 <frameset cols="60%,40%"> + <form> Titta på exemplet i praktiken > Tricket är självklart att ange rätt sökväg till de olika fönstren. Dock måste man vara på det klara med att webbläsarnas utskriftshantering ibland är under all kritik. Därför fungerar detta inte alltid... 5. Uppdatera två frames samtidigtHär är ett exempel på hur man kan göra: <form> Ett annat exempel är följande: Exempel 5 <frameset cols="150,*"> + Left: + <form> Titta på exemplet i praktiken > Med funktionerna får man fönstren att byta plats. Det går också att använda vanliga länkar med onClick. Men man kan också pröva att skriva så här: Exempel 6 samma som ovan, men: <a href="javascript:OvanNedan()">Ovan
överst</a> Titta på exemplet i praktiken > Vi vill ju inte öppna en enda sida utan vill ju ha en funktion aktiverad som i sin tur uppdaterar två sidor. Därför använder man sig av detta kommando. 6. ÖvningarÖvning
1 Övning
2 Övning
3 Övning
4 Övning
5 |