24. marts 2003 - 16:21Der er
7 kommentarer og 1 løsning
Rammer på tværs af vinduer
På en side skal et link åbne et popup-vindue, med en side, der indeholder rammer. Dernæst skal scriptet bestemme hvilken html-side der skal indlæses i en specifik ramme.
Jeg er nået så langt:
<script language="JAVASCRIPT"> <!-- skjuler for ældre browsere function fotoVindue() { fotoSide = window.open('fotoramme.htm','nytVin') vaelgSide() } function vaelgSide() {
*** Her kommer problemet ***
fotoSide.location.href="testside.htm"
Hvor skal jeg angive navnet (foto) på rammen i popup-vinduet ?
Det virker ikke... IE skriver følgende fejl: 'fotoSide.frames.foto.location' er null eller ikke et objekt.
I koden står der godt nok 'frames["foto"]', men IE oversætter det åbenbart.
Det jeg vil have er en funktion, hvor man kan ændre indholdet af en bestemt frame der befinder sig i et andet vindue, der tidligere er blevet åbnet. Når det virker skal det være med variable osv...
var fotoside; // Erklær variablen, så den kan læses af andre funktioner function fotoVindue() { fotoSide = window.open('fotoramme.htm','nytVin') vaelgSide(); }
function vaelgSide() { fotoSide.foto.location.href = "testside.htm"; }
Den skriver stadig 'fotoSide.foto.location' er null eller ikke et objekt.
Jeg kan sagtens få det til at virke uden at erklære variablen, hvis jeg vil ændrer hele det andet vindues indhold. Men kun at ændre indholdet i en frame kan jeg ikke få til at virke...
<script type="text/JavaScript"> var bla = "noget"; function sigDet() { alert(bla); } function sigDetAndet() { var bla = "noget andet"; alert(bla); } function sigDetTredie() { bla = "noget tredie"; alert(bla); } </script>
Her erklæres variablen 'bla' globalt - og kan derfor læses af alle funktioner.
I funktionen 'sigDetAndet()' erklæres en variabel med samme navn lokalt. Den kan kun læses inde i denne ene funktion.
I funktionen 'sigDetTredie()' sættes den globale variabel (bla) til en ny værdi. Check efterfølgende de to andre funktioner og se, det _kun_ er den globalt erklærede 'bla', der er blevet ændret. /mvh
PS: Lad endelig ikke dette være en opfordring til at bruge samme navn til både lokale og globale variabler. Det kan i princippet lade sig gøre, men det er dårlig kodeskik, da man hurtig kommer til at rode rundt i en slem gang kode-grød.
Det var _kun_ ment som et illustrativt eksempel :) /mvh
Tak skal du have for forklaringen, det er dejligt at der er nogen der gider. Jeg har set noget spaghetti-programmering med samme variabelnavne globalt og lokalt, og det er ikke til at hitte rede i!
Desværre virkede det script jeg ville lave ikke helt som forventet, idet det ca. hvert 5. gang man klikkede på linket ikke virkede. Jeg tror umiddelbbart, at den ikke fik nået at åbne et vindue hurtigt nok, og derfor kendte den ikke framenavnet i det øjeblik det blev udført.
Så i stedet har jeg løst problemet ved at overføre variablen fra det ene vindue til det andet og lade skiftet i frameindhold ske fra det åbnede vindue. En lidt besværlig omvej, men det virker!! :-)
Synes godt om
Ny brugerNybegynder
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.