Web-TorMedlem sedan nov. 200013 890 inlägg 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>
spangoMedlem sedan juni 20008 205 inlägg <script>
function body_onunload(){
alert("Du får besöka Google")
[b]return false;[/b]
}
</script>
<body onunload="[b]return[/b] body_onunload();">
<a href="http://www.google.se">Google</a>
</body>
Det ska teoretiskt sett funka, men det är möjligt att webbläsarn inte tillåter att du tvingar användaren att stanna.
Web-TorMedlem sedan nov. 200013 890 inlägg
Det ska teoretiskt sett funka,
Det funkar inte i praktiken. ;) :(
Jesper TMedlem sedan nov. 20017 144 inlägg Och som vanligt chefen, vad funkar inte, felmeddelande? ;)
Web-TorMedlem sedan nov. 200013 890 inlägg
Web-Tor skrev:
Klickar man på länken i exemplet så kommer man till Google.
...
// Här vill jag avbryta alla aktivitet.
// Man ska inte skickas vidare till Google.
Förstår du problemet?
Spangos kod ger samma resultat som min kod.
Jesper TMedlem sedan nov. 20017 144 inlägg Tror att det handlar om spangos: -"det är möjligt att webbläsarn inte tillåter att du tvingar användaren att stanna."
Du kanske kan experimentera med: window.onbeforeunload
spangoMedlem sedan juni 20008 205 inlägg Praktiken, vem bryr sig om den? :o ;)
Du kan ju också prova att göra en fuling:
<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...
Peter SMedlem sedan dec. 20025 483 inlägg Ett alternativ är att tilldela de länkar du inte vill skall navigera användaren vidare ett specifikt klassnamn, och sedan:
window.onload = function(){
var links = document.links,
iLen = links.length;
while (iLen--)
if (links[iLen].className == "[i]foo[/i]")
links[iLen].onclick = function(){ return false; }
}
:)
Web-TorMedlem sedan nov. 200013 890 inlägg För att beskriva problemet lite närmare:
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.
Peter SMedlem sedan dec. 20025 483 inlägg Nedan har jag använt confirm(), men eftersom du brukar showModalDialog() får du ersätta den med lämpligt värde.
window.onload = function(){
var links = document.links,
iLen = links.length;
while (iLen--)
links[iLen].onclick = function(){
if (changed) {
if (confirm("Spara?"))
window.event.returnValue = false;
}
}
}
:)
Web-TorMedlem sedan nov. 200013 890 inlägg Får det inte alls att funka. Ska det inte vara window.onunload på första raden?
Kan du lägga in koden i sin helhet? :)
Peter SMedlem sedan dec. 20025 483 inlägg Eventuella missuppfattningar förbehålles ;)
<script type="text/javascript">
var changed = true;
window.onload = function(){
var links = document.links,
iLen = links.length;
while (iLen--)
links[iLen].onclick = function(){
if (changed) {
if (confirm("Spara?"))
window.event.returnValue = false;
}
}
}
</script>
<a href="http://google.se">google</a>
Web-TorMedlem sedan nov. 200013 890 inlägg 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
dectgapMedlem sedan sep. 20021 655 inlägg
Web-Tor skrev:
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?
Web-TorMedlem sedan nov. 200013 890 inlägg 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.