Tutaj, w Stackoverflow, jeśli zacząłeś wprowadzać zmiany, to próbujesz opuścić stronę, pojawia się przycisk potwierdzenia javascript i pyta: „Czy na pewno chcesz opuścić tę stronę?” blee bla bloo ...
Czy ktoś już to zaimplementował, jak mogę śledzić, czy zmiany zostały popełnione? Wierzę, że mógłbym to zrobić sam, staram się nauczyć dobrych praktyk od was, ekspertów.
Próbowałem następujące, ale nadal nie działa:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
Czy ktoś może opublikować przykład?
javascript
html
message
onbeforeunload
confirm
Shimmy Weitzhandler
źródło
źródło
Odpowiedzi:
Aktualizacja (2017)
Współczesne przeglądarki rozważają teraz wyświetlanie niestandardowego komunikatu jako zagrożenia bezpieczeństwa, dlatego został on usunięty ze wszystkich. Przeglądarki wyświetlają teraz tylko ogólne wiadomości. Ponieważ nie musimy się już martwić ustawieniem wiadomości, jest to tak proste, jak:
Przeczytaj poniżej, aby zapoznać się ze starszą obsługą przeglądarek.
Aktualizacja (2013)
Oryginalna odpowiedź jest odpowiednia dla IE6-8 i FX1-3.5 (na co celowaliśmy w 2009 roku, kiedy została napisana), ale jest raczej nieaktualna i nie będzie działać w większości obecnych przeglądarek - wyszedłem poniżej w celach informacyjnych.
Nie
window.onbeforeunload
jest traktowane konsekwentnie przez wszystkie przeglądarki. Powinno to być odwołanie do funkcji, a nie ciąg znaków (jak podano w pierwotnej odpowiedzi), ale zadziała to w starszych przeglądarkach, ponieważ wydaje się, że większość z nich sprawdza, czy coś jest przypisaneonbeforeunload
(w tym funkcja, która zwracanull
).Ustawiono
window.onbeforeunload
odwołanie do funkcji, ale w starszych przeglądarkach należy ustawićreturnValue
zdarzenie zamiast po prostu zwracać ciąg:Nie możesz tego
confirmOnPageExit
zrobić i sprawdzić zero, jeśli chcesz, aby użytkownik kontynuował bez wiadomości. Nadal musisz usunąć zdarzenie, aby niezawodnie włączyć i wyłączyć:Oryginalna odpowiedź (opracowana w 2009 r.)
Żeby to włączyć:
Aby to wyłączyć:
Pamiętaj, że to nie jest normalne wydarzenie - nie możesz się z nim związać w standardowy sposób.
Aby sprawdzić wartości? To zależy od twoich ram weryfikacji.
W jQuery może to być coś (bardzo prosty przykład):
źródło
$("#submit_button").click(function() { window.onbeforeunload = null; });
. Pierwotnie użyłem zdarzenia onclick przycisku, ale oprócz tego, że nie jest tak fajny, to również nie działało z IE8.window.onbeforeunload
zdarzenia.onbeforeunload
Microsoft-izm jest najbliższa rzecz mamy do standardowego rozwiązania, ale należy pamiętać, że wsparcie przeglądarka jest nierówna; np. dla Opery działa tylko w wersji 12 i późniejszych (wciąż w wersji beta od tego pisania).Ponadto, aby uzyskać maksymalną zgodność , musisz zrobić coś więcej niż po prostu zwrócić ciąg znaków, jak wyjaśniono w sieci Mozilla Developer Network .
Przykład: Zdefiniuj następujące dwie funkcje włączania / wyłączania monitu nawigacyjnego (patrz przykład MDN):
Następnie zdefiniuj taki formularz:
W ten sposób użytkownik zostanie ostrzeżony o odejściu tylko wtedy, gdy zmienił pole tekstowe, i nie będzie monitowany, gdy faktycznie prześle formularz.
źródło
Aby to działało w Chrome i Safari, musisz to zrobić w ten sposób
Odniesienie: https://developer.mozilla.org/en/DOM/window.onbeforeunload
źródło
Z JQuery jest to całkiem łatwe. Ponieważ możesz powiązać z zestawami.
Nie wystarczy wykonać onbeforeunload, chcesz uruchomić nawigację tylko wtedy, gdy ktoś zaczął edytować rzeczy.
źródło
jquerys 'beforeunload' działał dla mnie świetnie
źródło
dla nowych ludzi, którzy szukają prostego rozwiązania, po prostu wypróbuj Areyousure.js
źródło
Jest to łatwy sposób na przedstawienie wiadomości, jeśli do formularza zostaną wprowadzone jakieś dane, i nie wyświetlenie wiadomości, jeśli formularz zostanie przesłany:
źródło
Aby rozwinąć i tak już niesamowitą odpowiedź Keitha :
Niestandardowe komunikaty ostrzegawcze
Aby zezwolić na niestandardowe komunikaty ostrzegawcze, możesz zawinąć je w funkcję taką jak ta:
Następnie wywołaj tę funkcję z niestandardowym komunikatem:
Włączam ponownie nawigację
Aby ponownie włączyć nawigację, wszystko co musisz zrobić, to ustawić
window.onbeforeunload
sięnull
. Oto jest zawinięty w schludną małą funkcję, którą można wywołać w dowolnym miejscu:Użycie jQuery do powiązania tego w celu utworzenia elementów
Jeśli używasz jQuery, można to łatwo powiązać ze wszystkimi elementami formularza takiego jak ten:
Następnie, aby umożliwić przesłanie formularza:
Dynamicznie modyfikowane formularze:
preventNavigation()
ienableNavigation()
może być powiązany z dowolnymi innymi funkcjami, takimi jak dynamiczne modyfikowanie formularza lub klikanie przycisku wysyłającego żądanie AJAX. Zrobiłem to, dodając do formularza ukryty element wejściowy:Następnie za każdym razem, gdy chcę uniemożliwić użytkownikowi nawigację, uruchamiam zmianę na tym wejściu, aby mieć pewność, że
preventNavigation()
zostanie wykonany:źródło
Tutaj wypróbuj to działa w 100%
źródło
Te standardowe stwierdza , że skłoniło mogą być kontrolowane poprzez anulowanie beforeunload zdarzenie lub ustawienie wartości zwracanej do wartości innej niż NULL . Stwierdza również, że autorzy powinni użyć Event.preventDefault () zamiast returnValue, a komunikatu wyświetlanego użytkownikowi nie można dostosowywać .
Od 69.0.3497.92 Chrome nie spełnia normy. Jednak zgłoszono zgłoszenie błędu i recenzję trwa . Chrome wymaga ustawienia returnValue przez odwołanie do obiektu zdarzenia, a nie wartości zwracanej przez moduł obsługi.
Obowiązkiem autora jest sprawdzenie, czy dokonano zmian; można tego dokonać za pomocą zmiennej lub upewniając się, że zdarzenie jest obsługiwane tylko wtedy, gdy jest to konieczne.
źródło
Kiedy użytkownik zacznie wprowadzać zmiany w formularzu, zostanie ustawiona flaga logiczna. Jeśli użytkownik następnie spróbuje opuścić stronę, zaznacz tę flagę w oknie. Załaduj zdarzeniu . Jeśli flaga jest ustawiona, wyświetlasz komunikat, zwracając go jako ciąg. Zwrócenie wiadomości jako ciągu spowoduje wyświetlenie okna dialogowego potwierdzenia zawierającego wiadomość.
Jeśli używasz ajax do zatwierdzania zmian, możesz ustawić flagę na
false
po zatwierdzeniu zmian (tj. W zdarzeniu powodzenia ajax).źródło
Możesz dodać
onchange
zdarzenie w polu tekstowym (lub dowolnym innym polu), które ustawia zmienną w JS. Gdy użytkownik próbuje zamknąć stronę (window.onunload), sprawdzasz wartość tej zmiennej i odpowiednio wyświetlasz alert.źródło
alert
iconfirm
są blokowane podczaswindow.onbeforeunload
iwindow.onunload
(przynajmniej w wersji Chrome na moim komputerze, ale prawdopodobnie także w każdej przeglądarce, aby kiedykolwiek obsługiwać te programy obsługi).Na podstawie wszystkich odpowiedzi w tym wątku napisałem następujący kod i zadziałał on dla mnie.
Jeśli masz tylko niektóre tagi wejściowe / tekstowe, które wymagają sprawdzenia zdarzenia onunload, możesz przypisać atrybuty danych HTML5 jako
data-onunload="true"
na przykład
i JavaScript (jQuery) może wyglądać następująco:
źródło
oto mój html
I w ten sposób zrobiłem coś podobnego w javaScript
źródło
Można to łatwo zrobić poprzez ustawienie ChangeFlag true, na onChange przypadku TextArea . Użyj javascript, aby wyświetlić okno dialogowe potwierdzenia na podstawie wartości ChangeFlag . Odrzuć formularz i przejdź do żądanej strony, jeśli potwierdzenie zwraca true, w przeciwnym razie nic nie rób .
źródło
To, czego chcesz użyć, to zdarzenie onunload w JavaScript.
Oto przykład: http://www.w3schools.com/jsref/event_onunload.asp
źródło
Dla znacznika body istnieje parametr „onunload”, z którego można wywoływać funkcje javascript. Jeśli zwróci fałsz, uniemożliwi nawigację.
źródło
<body onunload="return false;">
.