Hej!
Har ett lite problem, tror att jag själv har målat in mig i ett hörn.
Har en sida som öppnar ett Popup fönster som i sin tur submitar ett formulär till en dold IFRAME som sen öppnar en Popup som skall submit:a ett formulär som ligger i den första popup:en, typ så här:
Huvudsidan öppnar en Popup som heter Popup_Win1 som innehåller en IFRAME som heter IFRAME_FNC.
IFRAME:en öppnar en Popup rutan som heter Popup_Win2.
I Popup rutan Popup_Win2 skall en Submit triggas i Popup:en Popup_Win1.
Huvudsidan öppnar en popup. I denna popup finns en dold iframe dit ett formulär submitas från samma popup. I iframen på den sida som formuläret skickades till öppnas ett nytt popup-fönster varifrån du vill submitta ett formulär som ligger i den första popup'en (den första popup'en har alltså 2 formulär). Har jag förstått rätt?
Det beror på varifrån du vill göra detta. Men generellt kan man säga så här.
För att nå en popup från fönstret som öppnar den använder du den referens som du får när du öppnar den.
var foo=window.open(...
För att sedan stänga detta fönster från fönstret som öppnade det använder du;
foo.close();
För att nå fönstret som öppnade popup'en från popup'en i fråga använder du;
window.opener.
För att ex. byta adress på fönstret blir det;
window.opener.location.href=...
För att nå "föräldern" i en frames-struktur använder du parent. Exempelvis om du har en iframe så kan du från dokumentet i denna iframe ändra adressen på den fönster som iframen ligger i med;
parent.location.href=...
och för att nå en frame eller iframe från "föräldern" använder du dess namn (som du anger i name-attributet i <frame...> eller <iframe...>)
framenamn.location.href=...
Sedan är det bara att sätta ihop dessa. Anledningen till att det heter parent (och du har säkert även hört child i script-sammanhang) är att ritar du upp denna struktur på ett papper liknar det väldigt mycket ett släktträd. Det kan vara bra att ha i bakhuvudet.
Tack för klargörningen i hur detta fungerar. Dock får jag inte mitt skräp att fungera, jag får felmed. om att popup namnet är "null eller inte ett objekt". Kan det beror på att sidan som öppnar popup:en i iframe:en senare byts mot en annan sida (i samma iframe) som då skall stänga popup:en? Det jag håller på och gör är en upload funktion som skall visa ett popup meddelande medans filen laddas upp och sen stängas när uppladdningen är klar.
Kan det beror på att sidan som öppnar popup:en i iframe:en senare byts mot en annan sida...
Du har ju greppat det här till 100%. Helt rätt! :) Skulle det vara så att referenserna (variabler, objeket, etc) behölls skulle det bli ohållbart. Dina funktioner skulle garanterat krocka med något objekt som surfaren varit inne på 15 sidor tidigare. Du måste alltså behålla den informationen som du vill spara på en sida som inte laddas om. Om du ex. använder en frames-lösning kan <frameset>-sidan vara ett bra ställe att lägga funktioner och variabler som du sedan vill komma åt från underliggande sidor i framesen (som du kommer åt från child-framen via ex. parent.funktionsnamn() om det är en funktion som du vill anropa).
...lite klarnar det. Nu har jag lagt alla JS-skripten i "huvud"-fönstrets sida (denna byts aldrig), och anropar funktioner via parent i dom övriga sidorna och allt fungerar UTAN det skript som skall stänga popup:en, får nu felmeddelande om att "objektet inte stöder inte egenskapen eller metoden", så nått galet gör jag.
//K
Njae... Det där går inte (men det har du ju redan märkt). Nu kommer doClosePopup() att anropas med en sträng som innehåller "foo", inte någon objekt-referens till popupen. Funktionen som öppnar popup'en, ligger den i samma dokument som doClosePopup()? I så fall kan du göra så här;
var foo=null;
function funktion_som_oppnar_popupen(){
// lite kod
foo=window.open(...
// mer kod
}
function doClosePopup(){
if(foo){ foo.close(); }
}
... sedan anropar du bara doClosePopup() utan parametrar. Alltså, även foo bör definieras (när du skapar popup'en) i det dokument som inte laddas om.