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.
Hajjar ni?
Tack på förhand!
//K
JojoxxMedlem sedan juni 20004 308 inlägg 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?
I så fall, på sidan i popup 2;
window.opener.parent.formulärsnamn.submit();
TACK!
Du är kung! Funkade hur bra som helst (själv har jag suttit i ett par timmar med detta "problem"). Ett stort tack till dig JoJoxx!
:e
Jo, en lite tilläggs fråga...
Hur gör man om man vill stänga denna popup, alt. ladda en ny sida i den, från IFRAME:en?
//K
JojoxxMedlem sedan juni 20004 308 inlägg 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.
Glasklart! Eller...
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.
Denna kod öppnar popupen från ifram:en
function doPopUp(url, width, height) {
var win_l = (screen.width - width) / 2;
var win_t = (screen.height - height) / 2;
var foo = window.open(url, '', 'height=' + height + ',width=' + width + ',top=' + win_t + ',left=' + win_l + ' ,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no');
}
Och denna kod borde väl kunna stänga popup från samma iframe (dock laddas stäng-funktionen av en annan sida men i samma iframe)
foo.close();
//K
JojoxxMedlem sedan juni 20004 308 inlägg
klementin skrev:
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).
Så sant så sant...
...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
JojoxxMedlem sedan juni 20004 308 inlägg Exakt hur ser anropet ut som genererar detta fel?
parent.doClosePopup('foo');, där foo är namnet på popupen jag satte genom var foo = window.open.
Är det ifram:en som håller referencen (eftersom det är därifrån den triggas, eller är det sidan som funktionerna ligger i)?
//K
JojoxxMedlem sedan juni 20004 308 inlägg 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.
Men va F-N!
Det funkar ju! Behöver jag säga det igen? Du är KUNG JoJoxx!!!
Nu fungerar allt precis som jag vill ha det, och det blev riktigt snyggt oxå :e
Jätte TACK för att du orkade ta dig tid att hjälpa en hopplös fejkprogrammerare som jag. Tack! Tack!
Din för evigt!
//Klementin