Avatar billede hedemann Nybegynder
05. oktober 2007 - 08:55 Der er 10 kommentarer og
1 løsning

Advarsel når en sider / frame forlades

Jeg har en side der indeholde en frame med et 'asp:calender' objekt, og ønsker at give brugeren en advarsel når siden forlades og evt. kalender ændringer ikke er gemt. Hvis der fortages en ændring i kalenderen "tænder" jeg for en gem-knap.

Jeg har prøvet flg.
window.onbeforeunload = function(){
    event.returnValue = "Ændringer er ikke gemt, vil du forlader side?";

window.onbeforeunload virker ikke kun når siden forlades med også på 'asp:calender' objektet og det er jo ikke meningen.... hva kan jeg gøre?
Avatar billede neoman Novice
05. oktober 2007 - 09:37 #1
Du kan lege lidt med noget i denne stil:

<script type="text/javascript">
var needToConfirm = true;
window.onbeforeunload = confirmBrowseAway;


function confirmBrowseAway()
{
  if (needToConfirm) {
    return "Are you sure you want to do that? If you leave this page " +
    "now, your work will NOT be saved!";
  }
}
</script>

og i din code-behind, i pageload :

        Calendar1.Attributes.Add("onclick", "java script:needToConfirm = false;")
Avatar billede hedemann Nybegynder
05. oktober 2007 - 12:45 #2
Det var det der skulle til, så send lige et svar.

Hva' gør "Calendar1.Attributes.Add("onclick", "java script:needToConfirm = false;")" fortæller den at javascriptet ikke skal virke på dette objekt? Og hvor finder man sådanne nytteige oplysninger.
Avatar billede neoman Novice
05. oktober 2007 - 12:51 #3
.attributes.add tilføjer javescript til server kontroller. javascriptet siger "når du klikker på noget i kalenderen, sæt værdien af js-variablen needToConfirm til false"

Når du så klikker på kalenderen, så trigger det en postback og windows.beforeunload trigges. Så kører funktionen confirmBrowseAway. Den checker så lige værdien af needToConfirm, men den har du jo lige sat til false med klikket, så der sker ikke mere. Alle de andre muligheder for at navigere væk har IKKE sat needToConfirm=false, så popupen dukker  op.

Og hvordan man finder den slags ? Aner det ikke - det er noget jeg har samlet op med tiden, her og der:)
Avatar billede hedemann Nybegynder
05. oktober 2007 - 13:17 #4
endnu en gang tak.
Avatar billede hedemann Nybegynder
05. oktober 2007 - 14:47 #5
.....sidder her og river de sidste hår ud af mit hoved.......  ;-)

Hvis confirmBrowseAway kun skal være aktiv når asp:Button med ID="ButtonGem" er synlig (Visible="true"), hvad gør jeg så.

Der er vist noget med at hvis et objekt har Visible="false" så kan det ikke ses fra javascriptet af - korrekt ikk?
Avatar billede neoman Novice
06. oktober 2007 - 20:01 #6
Den eksisterer slet ikke på klienten når Visble=false, fordi den ikke bliver sendt fra serveren. Det kan du så udnytte:

var needToConfirm;
if (document.getElementById("<%=btnMyButton.ClientID%>")) {
//knappen findes ikke så vi behøver ikke checke for navigering væk fra siden
needToConfirm=false;
}
else {
//knappen findes, så nu skal vi checke
needToConfirm=true;
}
smid ovenstående ind i stedet for det nuværende linje:
var needToConfirm = true;
Avatar billede neoman Novice
06. oktober 2007 - 20:02 #7
oops - omvendt:
var needToConfirm;
if (document.getElementById("<%=btnMyButton.ClientID%>")) {
//knappen findes, så nu skal vi checke
needToConfirm=true;
}
else {
//knappen findes ikke så vi behøver ikke checke for navigering væk fra siden
needToConfirm=false;
}
Avatar billede hedemann Nybegynder
08. oktober 2007 - 12:16 #8
Mange tak det ser jo rigtigt ud, men jeg kan ikke få det til at virke.

Min knap er def. i aspx'en sådanne

"<asp:Button ID="ButtonGem" runat="server" Text="Gem" style="width:60px" Visible="false" />"

Når jeg via "view source" se knappen, har den id = "ButtonGem", så langt så godt. Så indsætter jeg det i betingelsen "if (document.getElementById("<%=ButtonGem.ClientID%>")) {" og som en test har jeg indsat to alert, en i hver tilstand - "knap findes" og "knap findes ikke". Men hver gang melder alert at knappen ej findes også selvom at jeg kan se den på siden og i soursen.

Hvad går der galt?
Avatar billede neoman Novice
08. oktober 2007 - 12:33 #9
Hehe - det er jo fordi knappen aldrig findes når scriptet kører. Flyt hele scriptet til et sted  efter der hvor knappen optræder i din markup - i bunden af det hele burde være fint nok.
Avatar billede hedemann Nybegynder
09. oktober 2007 - 09:36 #10
Det er super nu virker det som det skal, jeg kan se at der er meget at lære i forbindelse med javascript.

Hva' skylder jeg?
Avatar billede neoman Novice
09. oktober 2007 - 10:49 #11
it's on the house;)
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