2012-02-21 23 views
12

Chcę wykonać metodę działania, gdy użytkownik rezygnuje z określonej strony przy użyciu jQuery.

strona ma następujący kod:

<script type="text/javascript"> 

     $(window).unload(function() { 
      alert("Handler for .unload() was called."); 
     }); 

    </script> 

Kiedy opuścisz strony nigdy nie zobaczyć oczekiwaną alert.

+1

Czy próbowałeś już w innych przeglądarkach? Jaką przeglądarkę wypróbowałeś? W dokumentacji na stronie jQuery jest jasne, że to wydarzenie jest dość niestabilne. – anddoutoi

+1

Wyładowanie jest przestarzałe i usunięte, sprawdź to: https://api.jquery.com/unload/ –

Odpowiedz

25

W rzeczywistości niektóre przeglądarki, takie jak Google Chrome, mogą zostać zablokowane, jeśli spróbujesz uzyskać alert w oknie unload. Jako użytkownik podoba mi się ta funkcja. Alarmowanie za każdym razem próby nawigować od strony do bani:

enter image description here

Wymień alert z console.log lub coś innego mniej inwazyjne dla użytkownika i imprezy zostanie szczęśliwie nazywa.

Być może zechcesz też wypróbować zdarzenie onbeforeunload.

+0

Dzięki. Wiedziałem, że zdarzenie unload było niestabilne, ale nie wiedziałem, że chrome (z którego korzystałem) zachowuje się w ten sposób. –

+0

@Darin Dimitrov: Zastąpienie alertu konsolą.log nie przyniesie zbyt dużego efektu, ponieważ konsola (przynajmniej w Chrome) jest czyszczona, zaraz po odświeżeniu strony lub przejściu do innej.Możesz zobaczyć ślady twoich wiadomości napisane do konsoli kilka milisekund, zanim faktycznie znikną, więc wolałbym, żeby to było bezużyteczne. Wyłączenie alertu przy rozładowywaniu nie jest najlepszym pomysłem. Trudno wykonać poważne testy, a "okropne" strony mogą łatwo obejść się, wyświetlając własny "denerwujący" komunikat, nie używając alertu (jQuery UI, niektóre div, itp.). – trejder

+7

@trejder Jeśli klikniesz prawym przyciskiem myszy na konsoli w chrome, istnieje opcja zachowania logu po nawigacji – Luke

0
window.onbeforeunload=navigationError; 

var dont_confirm_leave = 0; var leave_message = 'You sure you want to leave?'; 

function navigationError(e) 
    { 
    if(dont_confirm_leave!==1) 
    { 
     if(!e) e = window.event; 
     //e.cancelBubble is supported by IE - this will kill the bubbling process. 
     e.cancelBubble = true; 
     e.returnValue = leave_message; 
     //e.stopPropagation works in Firefox. 
     if (e.stopPropagation) 
     { 
     e.stopPropagation(); 
     e.preventDefault(); 
     } 

     //return works for Chrome and Safari 
     return leave_message; 
    } 
    } 
10

jquery .on ("rozładuj", ..); nie był dla mnie niezawodny. przełączyłem się, aby użyć beforeunload. po prostu upewnij się, że nic nie zwrócisz, lub użytkownik dostanie "na pewno opuścisz stronę" - popup.

<script type='text/javascript'> 
    $(window).on('beforeunload', function(){ 
     console.log("beforeUnload event!"); 
    }); 
</script> 
+0

Chociaż odpowiedź Darina jest poprawna, użytkownik powinien naprawdę odwołać się do tej odpowiedzi. Używanie "onbeforeunload" nie tylko pozwala uruchamiać alerty, ale jest także zalecane i niezawodne w przeciwieństwie do rozładunku, co - przynajmniej w przypadku Chrome - jest dość błędne. –

5

jak bhelm powiedział beforeunload prace dla mnie.
return false na to wydarzenie wywoła domyślną przeglądarkę

są na pewno chcesz opuścić tę stronę?


$(window).on('beforeunload', function() 
    { 
     return false; 
    }); 
0

jeśli chcesz ostrzec użytkownika, że ​​pozostawienie tej strony, a następnie, jeśli to

/* $(window).unload(function() 
 
{ 
 
\t //alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
}); */

funkcja nie działa dla Ciebie, a następnie zastąpić kod z włączoną funkcją "beforeunload", taką jak ta

$(window).on("beforeunload", function() 
 
{ 
 
\t alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
});

to praca dla mnie! możesz zobaczyć dane wyjściowe w dzienniku konsoli you leaving this page

Powiązane problemy