Avatar billede wolfgang Praktikant
19. oktober 2005 - 08:29 Der er 18 kommentarer og
2 løsninger

Confirm inden vinduet lukkes

Hej,

Jeg har forsøgt med lidt kode, der skal give brugeren en lille påmindelse inden et vindue lukkes.
Dette virker dog ikke helt efter hensigten.

Kode-snas
function CancelWizard() {
        if (confirm('Luk ikke vinduet på den måde!\n\Ønsker du alligevel at forsætte?'));
}

<body onBeforeUnLoad="CancelWizard();">

Sådan skal det bruges.
1) Brugeren ønsker at lukke et "popup" vindue, og klikker på "krydset"
2) Så kommer der en Confirm-box
3) Hvis brugeren vælger at annullere, lukkes vinduet ikke.

Problemet er pt. at selvom brugeren annullere, lukkes vinduet alligevel. Kan det forhindres?
Avatar billede -mundi- Nybegynder
19. oktober 2005 - 08:33 #1
function CancelWizard() {
        return confirm('Luk ikke vinduet på den måde!\n\Ønsker du alligevel at forsætte?');
}
Avatar billede -mundi- Nybegynder
19. oktober 2005 - 08:33 #2
<body onBeforeUnLoad="return CancelWizard();">

hvis jeg husker rigtigt, det er stadig lidt tidligt :-)
Avatar billede nissetec Nybegynder
19. oktober 2005 - 08:38 #3
Har selv fiflet lidt med det engang. Når brugeren har trykket "luk", så er BeforeUnload aktiveret, og dermed en absolut Unload.

Men jeg gør det, at jeg vælger at spørge om brugere er sikker på at han vil lukke vinduet. Hvis der trykkes annullér, så reloades siden bare med window.open, for den kører jo hele onBeforeUnload rutinen.
Avatar billede wolfgang Praktikant
19. oktober 2005 - 08:47 #4
Hej Nissetec,
Vil du give et kode eksempel på dit forslag?
Avatar billede wolfgang Praktikant
19. oktober 2005 - 08:48 #5
Hej -Mundi-,
Din løsning virker desværre ikke. Vinduet bliver lukket.
Avatar billede -mundi- Nybegynder
19. oktober 2005 - 08:54 #6
<body onbeforeunload="return 'Det er ikke en god måde at lukke vinduet, eller noget andet '"></body>
Avatar billede nissetec Nybegynder
19. oktober 2005 - 08:54 #7
Der er en løsning, som du lige kan lege med, mens jeg lige finder den rutine jeg brugte. Bare for at se, om den var speciel. Jeg kan bare huske, at det virker :) Nå, men her er et alternativ:

<script type="text/javascript">
function CancelWizard() {
    event.returnValue = "Vinduet bliver lukket";
}
</script>
Avatar billede nissetec Nybegynder
19. oktober 2005 - 08:58 #8
Nå, den var lige ud af landevejen:

function CancelWizard() {
      if (confirm("Lukke?")) {
alert ("Der bliver lukket...");
}
else {
window.open("den_side_du_vil_genåbne.htm");
  } 
}


alert-linjen kan du bare slette. Det var bare for at illustrere, at der bliver lukket. Men selv om du sletter alert-linje, bliver der bare lukket alligevel...
Avatar billede wolfgang Praktikant
19. oktober 2005 - 09:05 #9
-> nissetec
Dit alternative forslag virker tildels. "Beskeden" kommer 2 gange, før vinduet lukkes.
Avatar billede wolfgang Praktikant
19. oktober 2005 - 09:06 #10
Wee...
Kunne man lade else-sætningen være tom.
Så vil der vel ikke blive reloaded?
Avatar billede wolfgang Praktikant
19. oktober 2005 - 09:24 #11
Hej,
Dit andet forslag virker som det alternative. "Beskeden" kommer 2 gange, før vinduet lukkes.
Avatar billede nissetec Nybegynder
19. oktober 2005 - 09:34 #12
Else-sætningen kan sagtens stå tom, men det var jo meningen med else (efter tryk på annuller) at siden skulle komme frem igen.

Mht til dobbeltvisningen: Har du husket at fjerne return fra onBeforeUnload-eventen fra <body>?
Avatar billede wolfgang Praktikant
19. oktober 2005 - 09:36 #13
Koden ser således ud:
<body onBlur="this.focus();" onBeforeUnLoad="CancelWizard();">

function CancelWizard() {
    if (confirm("Luk ikke vinduet på den måde!\n\Ønsker du alligevel at forsætte?")) {
    }
    else {
    window.open("den_side_du_vil_genåbne.htm");
      } 
}
Avatar billede nissetec Nybegynder
19. oktober 2005 - 10:50 #14
OK, nu har jeg prøvet i en halv time på at få det til at komme frem 2 gange uden held. Jeg får det kun én gang. Kig selv lige igennem og afprøv:

Fuld htm:
-------------------------------------
<html>
<head><script type="text/javascript">
function CancelWizard() {
    if (confirm("Luk ikke vinduet på den måde!\n\Ønsker du alligevel at forsætte?")) {
    }
    else {
    window.open("den_side_du_vil_genåbne.htm");
      } 
}
</script>
<title>Untitled</title>
</head>
<body onBlur="this.focus();" onBeforeUnLoad="CancelWizard();">
</body>
</html>
--------------------------------

Kommer den stadig frem 2 gange?
Avatar billede wolfgang Praktikant
19. oktober 2005 - 11:05 #15
Den er bien - så spiller det!
Avatar billede nissetec Nybegynder
19. oktober 2005 - 11:07 #16
Godt at høre. Tak for point og god fornøjelse :)
Avatar billede wolfgang Praktikant
19. oktober 2005 - 11:17 #17
Lige et tillægsspørgsmål :)

Jeg har en knap dette script - der lukker vinduet:
java script:this.close()

Når jeg benytter den, kommer beskeden 2 gange.
Hvad kan jeg evt. bruge i stedet for?
Avatar billede wolfgang Praktikant
19. oktober 2005 - 11:18 #18
Har også prøvet med java script:self.close()
Avatar billede wolfgang Praktikant
19. oktober 2005 - 11:29 #19
Og han bliver ved :)

Kan man i stedet for window.open("den_side_du_vil_genåbne.htm"); ikke lave noget ala return false.
Således at der ikke sker noget reload eller ændring det eksisterende indhold i vinduet?

Håber at du også kan være behjælpelig med dette.
Avatar billede nissetec Nybegynder
19. oktober 2005 - 13:10 #20
Det mener jeg ikke man kan. Unload-event'en er "trigget".

Ellers skal du bruge event-handleren:


<html>
<head><script type="text/javascript">
function CancelWizard() {
    event.returnValue = "Vinduet bliver lukket";
}
</script>
<title>Untitled</title>
</head>
<body onBlur="this.focus();" onBeforeUnLoad="CancelWizard();">
</body>
</html>
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