Klickar man på länken i exemplet så kommer man till Google.
Jag vill avbryta den här aktionen och istället stanna kvar på samma sida.
Hur gör man det?
<script>
function body_onunload(){
alert("Du får inte besöka Google")
// Här vill jag avbryta alla aktivitet.
// Man ska inte skickas vidare till Google.
}
</script>
<body onunload="body_onunload();">
<a href="http://www.google.se">Google</a>
</body>
<script>
function body_onunload(){
alert("Du får besöka Google")
throw "Eller... förresten... nej!";
}
</script>
<body onunload="body_onunload();">
<a href="http://www.google.se">Google</a>
</body>
Jag tror dock att detta kan paja framtida anrop av script eftersom man får ett ofångat fel. Kanske kan man använda onerror på något fint sätt för att ta hand om det...
Det finns en js-funktion som håller reda på om något fält på sidorna ändras. Lämnar man sidan (genom att t.ex. klicka på en länk) utan att spara så får man upp ett fönster (showModalDialog) där man kan välja att: 1. Spara. D.v.s man stannar kvar på samma sida genom att forumläret postas. 2. Inte spara. D.v.s man går vidare till den sida man valt.
Så långt är allt lugnt.
Ibland har vi dessutom formulär med mandatoryf-fält. När användaren trycker på "SPARA" postas inte formuläret utan istället körs en js-funktion som kollat att alla mandatory-fält är ifyllda. Därefter postar js-funktionen formuläret eller så markeras de fält som måste fyllas i.
Nu kommer problemet.
Användaren är inne på en sida med mandatory-fält, skriver i lite data (flaggan changed aktiveras). Han fyller dock inte i alla mandatory-fält utan klickar istället på en länk i menyn. Ett fönster dyker upp med samma fråga som tidigare. Trycker användaren "Inte spara" är allt frid och fröjd och man surfar glatt vidare till sin ny sida. Men trycker han "Spara" så vill jag ju inte posta formuläret. Jag vill ju istället avbryta all aktivitet och återgå till sidan där han i lugn och ro kan fylla i de fält som saknas.
Problemet är ju bara att funktionen inte körts onunload. Jag har ungefär 37 funktioner som interagerar med varandra och är beroende av att denna händelse ligger i samma onunload-function. :l
Problemet är ju bara att funktionen inte körts onunload. Jag har ungefär 37 funktioner som interagerar med varandra och är beroende av att denna händelse ligger i samma onunload-function. :l
Det klargjordes ju tidigare i tråden att du inte kan avbryta att man lämnar sidan genom window.onunload. Om det hade fungerat (window.onunload = function(){return false}) hade du kunnat komma till en sida som man aldrig hade kunnat lämna.
Peter S' skript utnyttjar att man kan avbryta en länktryckning, t ex <a href="abc" onclick="return false">.
När sidan har laddats, window.onload, stegar han igenom alla länkar och lägger till den anonyma funktionen som finns inuti hans window.onload-funktion till alla länkars onclick-event.
Det är alltså den anonyma funktionen som styr ifall en länktryckning ska gå igenom eller inte.
Kod för att validera formulär läggs lämpligen i onsubmit såatt du kan avbryta formuläret redan där.
Men jag kan annatrs tipsa om onbeforeunload, som inte hindrar användaren från att lämna sidan, men iaf frågar henne om hon vill göra det.
<script>
function window.onbeforeunload(){
return "Vill du verkligen lämna sidan?";
}
</script>
Troligen IE-specifikt, men det ska väl inte vara ett problem?
Jo, onbeforeunload är verkligen trevlig. Just nu är jag dock lite försiktig med att införa en sådan förändring eftersom risken finns att någon annan funktion påverkas.
Som det är nu har vi löst det genom att formuläret postas även om inte alla mandatory-fält är ifyllda. Alla data valideras ju även på serversidan så enda nackdelen är att användaren får vänta på servervalidering i just det här fallet.
135 ms totalt · 3 externa anrop · v20260731065814-full.b746b907