Avatar billede lsskaarup Nybegynder
25. februar 2005 - 14:40 Der er 18 kommentarer og
1 løsning

Luk popup og load anden siden ved submit

Jeg skal lige have lidt hjælp til en nok simpel ting.

Jeg skal ved klik på en submit knap i et popup vindue, lukke vinduet, og loade en anden side, på den bagvedliggende browser.

Altså hovedside viser en oversigt over ordre, klikker man på en bestemt ordre, bliver den åbnet i et popup-vindue. Her har jeg så lavet en knap med onclick på til at lave en kopi af ordren. Det fungere godt nok, men den nye oversigtsside bliver vist i popupvinduet. Det skal skal, men derimod skal vinduet lukkes, og oversigten skal vises i hovedsiden.

Hvordan skal det gøres?
Avatar billede roenving Novice
25. februar 2005 - 14:51 #1
Ved submit ?-)

-- så skal vi over i en hel speciel teknik, som involverer at sætte et name på opener-vinduet:

<form action="" method="post" target="mother" onsubmit="opener.name='mother';">
Avatar billede lsskaarup Nybegynder
25. februar 2005 - 14:58 #2
Og det skal på hovedsiden eller mother, ikke? ;-)

Hvordan skal min onclick så se nu på undersiden. Pt. ser den sådan ud ->
onclick="this.form.action='/tilbud_copy_process.php?copyid=<?php echo $res['tilbudsnummer']; ?>'"

og det er jo klart nok at this.form.action, reloader i det aktuelle vindue.
Avatar billede roenving Novice
25. februar 2005 - 15:13 #3
Nej ...

<scenario>
  Du har en form i en popup:
    <form action="" method="post" target="mother" onsubmit="opener.name='mother';">

  Du har et element med en onclick, som sætter formens action:
    onclick="this.form.action='/tilbud_copy_process.php?copyid=<?php echo $res['tilbudsnummer']; ?>'"
</scenario>

Onclicken laver jo ikke noget om i form-tagget andet end action, så hvis du submitter normalt (med en submit-button e.l. !-) vil onsubmit blive kørt, og der sætte opener-vinduets navn til det samme, som target er på formen ...

-- det kan så være relevant at sørge for at popup-vinduet lukkes efter et lille stykke tid (100 ms. e.l.), men det er jo en anden ting !o]
Avatar billede lsskaarup Nybegynder
25. februar 2005 - 17:22 #4
Okay, navnet mother, er det så noget jeg skal give til hovedsiden, eller ved popup'en selv hvilke browser, der om jeg så må sige er moderen?

Og den anden ting, hvordan lukker jeg så popup'en?
Avatar billede roenving Novice
26. februar 2005 - 04:41 #5
Du skal ikke gøre mere, for opener er det vindue, som åbner, men det har bare ikke noget navn, hvis det er brugerens eget åbnede vindue, hvorfor vi tildeler den et, så det kan bruges som target !-)

-- med nedlukning:

<form action="" method="post" target="mother" onsubmit="opener.name='mother';setTimeout('self.close()',100);">
Avatar billede lsskaarup Nybegynder
26. februar 2005 - 11:19 #6
Okay, det prøver jeg lige, dog bliver det nok først på mandag.
Avatar billede lsskaarup Nybegynder
28. februar 2005 - 09:13 #7
Okay, det fungere ikke helt efter planen.

Popup'en bliver godt nok lukket og "moder" vinduet arbejder videre, men der udføres faktisk ingen ting.

Ved klik på ordre-knappen, skal den kalde en proces-fil, som gerne skulle skrive i db'en, med nogle oplysninger, bl.a. ændre tilbudet til en ordre, men det sker ikke. Hovedvinduet kører bare videre med udfyldelse af de næste vinduer i popup'en.

Min form ser sådan ud:

<form action="/salg_tilbud_init_process.php" method="post" name="ds" id="ds" style="display:inline;" autocomplete="off" target="mother" onsubmit="opener.name='mother';setTimeout('self.close()',100);">

.
.
.

<?php
//Hvis det er et tilbud
if ($res[r526a] == 1) {

    $query = "SELECT status FROM tilbud WHERE id='".addslashes($_GET['id'])."'";

    $sql = mysql_query($query) or die(mysql_error());

    $foo = mysql_fetch_assoc($sql);
   
    //Hvis det er en ordre
    if ($foo['status'] == 3) {?>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="submit2" class="submit" value="Fortsæt"></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" Disabled name="rev" class="submit" value="Rev."></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="kopi" class="submit" onclick="this.form.action='/tilbud_copy_process.php?copyid=<?php echo $res['tilbudsnummer']; ?>'" value="Kopi"></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" Disabled name="ordre" class="submit" value="Ordre"></td>

    <?php } else { //Hvis det kun er et tilbud?>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="submit2" class="submit" value="Fortsæt"></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="rev" class="submit" value="Rev." onClick="/tilbud_copy_process.php?rev=ny&copyid=<?php echo $foo['tilbudsnummer']; ?>"></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="button" name="kopi" class="submit" onClick="/tilbud_copy_process.php?copyid=<?php echo $res['tilbudsnummer']; ?>" value="Kopi"></td>

        <td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="ordre" class="submit" onClick="/ordre_copy_process.php?copyid=<?php echo $res['tilbudsnummer'];?>" value="Ordre"></td>

    <?php }
} else { //Hvis det er en forespørgelse?>

<td width="690"><img src="/gfx/transparent.gif" width="1" height="10" alt="" border="0"><br><input type="submit" name="submit2" class="submit" value="Fortsæt"></td>

<?php } ?>

</tr>
</table>

.
.
.

</form>

Det vil altså sige, at jeg skal have den til at hente forskellige sider, alt efter om der trykkes på Ordre, Rev, Kopi eller Foresæt, men selvom jeg har onClick på, så henter de alle sammen, som om de hed Foresæt, altså bruger actionen som står i formen.

Hvad skal jeg gøre, hulk hulk ;-)
Avatar billede lsskaarup Nybegynder
28. februar 2005 - 09:15 #8
Jeg glemte vist at sige, at ved klik på Foresæt knappen skal popup'en ikke lukkes, kun ved alle de andre.
Avatar billede lsskaarup Nybegynder
04. marts 2005 - 09:31 #9
hallo???
Avatar billede lsskaarup Nybegynder
07. marts 2005 - 09:47 #10
Okay sidste etape, tror jeg.

Fra hovedsiden åbner jeg det enkelte tilbud i et popup-vindue. Her har jeg 4 submit knapper, "Fortsæt" hvis action ligger som default på formen, og gemmer oplysninger og "bladre" videre (det er sådan at oplysningerne er fordelt over flere sider), Revision, Kopi, og Ordre. De sidste 3 skal henholdsvis lave en ny revision, en kopi eller en ordre af tilbudet. Jeg har kun lavet for kopi-knappen, og får jeg den til at virke ordentligt så er den ingen sag, at få de andre til at virke, forhåbentlig...

Nå men Kopi-knappen har en onClick, som kalder denne JavaScript-funktion: function launchKopi(ordre){
    window.open('/deling.php?ordreId=<?php echo $res['id']; ?>', 'kopiPop', '');
    window.close();
}

Deling.php ser sådanne ud:
<?php
$id = $_GET[ordreId];
header('Location: /tilbud_copy_process.php?copyid='. $id);
?>

tilbud_copy_process.php sørger så for at lave en kopi at tilbudet, for til sidste at lave en ny header: header('Location: /salg/tilbud/'); (via htaccess finder den ud af hvad siden hedder)

Dette gør at jeg nu var 2 vinduer åbne, et med tilbudsoversigten, hvor jeg åbnede det enkelte tilbud, og den nye oversigt over forespørgelser, indeholdende kopien af ordren. Så det virker godt nok, jeg skal bare kun ende en 1 åbent vindue, kan det løses på denne måde, men en eller anden smart kodestump?
Avatar billede roenving Novice
07. marts 2005 - 10:28 #11
Vil du have resultatet tilbage i det oprindelige vindue ?-)

-- for du ved vel nok, at lukning af vinduer, du selv har åbnet ikke giver problemer, mens lukning af brugerens oprindelige giver grimme advarsler ...
Avatar billede lsskaarup Nybegynder
07. marts 2005 - 13:23 #12
ja, jeg vil sådan set gerne have resultatet tilbage i det oprindelige vindue, så skal jeg heller ikke lukke nogle som brugeren har åbnet.
Avatar billede roenving Novice
07. marts 2005 - 13:29 #13
Hvad med at loade via get-parametre ?-)

opener.location.href = "visOrdre.php?id=" + id;
Avatar billede lsskaarup Nybegynder
07. marts 2005 - 14:30 #14
kan det gør det lettere og hvordan?
Du må undskylde, men jeg er helt rundt på gulvet lige nu, og så fordi jeg multitasker, hvor jeg fejlsøger noget andet.
Avatar billede lsskaarup Nybegynder
08. marts 2005 - 13:05 #15
roenving -> Jeg skal lige have tjek på noget her. Dit forslag med at loade via get, mere du det skal være på det oprindelige vindue?
Avatar billede roenving Novice
08. marts 2005 - 13:56 #16
Det bliver i det oprindelige vindue, ja ...

-- men funktionen skal jo udføres i popuppen, som det fremgår af brugen af opener !-)
Avatar billede lsskaarup Nybegynder
08. marts 2005 - 16:10 #17
Jeg kan bare stadig ikke rigtig se hvordan det skal kunne hjælpe mig.
Avatar billede lsskaarup Nybegynder
29. marts 2005 - 09:09 #18
Kan I hjælpe
Avatar billede lsskaarup Nybegynder
04. april 2005 - 08:11 #19
Nå ikke
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