05. oktober 2007 - 08:55Der 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?
<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>
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.
.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:)
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;
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; }
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.
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.
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.