Co próbuję osiągnąć, to ostrzec użytkownika o niezapisanych zmianach, jeśli spróbuje zamknąć stronę lub odejść od niej bez uprzedniego zapisania.Aktywowanie TYLKO OnFefore przy zmianie wartości pól
Udało mi się otworzyć okno dialogowe OnBeforeUnload()
... ale nie chcę, aby było ono wyświetlane, jeśli użytkownik nie zmodyfikował żadnych wartości pól. W tym celu używam tego ukrytego pola wejściowego o nazwie is_modified, które zaczyna się od wartości domyślnej false i zmienia się na true, gdy dowolne pole jest edytowane.
Próbowałem powiązać zdarzenie zmienić do tego pola jest zmodyfikowane, aby spróbować wykryć zmianę wartości ... i tylko wtedy aktywować OnBeforeUnload.
$('#is_modified').change(function() {
if($('#is_modified').val() == 'true')
window.onbeforeunload = function() { return "You have unsaved changes."; }
});
Ale z tego co mi zrozumieć to, że zdarzenie change()
działa dopiero po tych 3 krokach - pole odbiera skupić wartość zostanie zmieniona, a pole traci ostrość. W przypadku ukrytego pola wejściowego nie jestem pewien, jak działa ta funkcja odbierania i utraty ostrości! Dlatego funkcja onbeforeunload nigdy nie jest aktywowana.
Czy ktokolwiek może sugerować sposób na utrzymanie spustu na poziomie jest zmodyfikowany?
Dzięki.
"true" nie jest prawidłową wartością. W niektórych przeglądarkach (przynajmniej Firefox, może więcej) zwracanie "null" spowoduje anulowanie okna dialogowego. Howerver, w IE, nie mogłem znaleźć sposobu na anulowanie okna dialogowego z poziomu obsługi. Jedyną rzeczą, która zadziałała, było całkowite usunięcie programu obsługi (np. "Window.beforeunload = null"), jak w odpowiedzi Bryana Larsena. –
Wystarczająco fair. Niestety, nie sprawdziłem dokładnie mojego rozwiązania, zanim odpowiedziałem. :( –
Wiem, że trochę się spóźniłem na imprezę, ale właśnie na to wpadłem, jednak w IE, jeśli funkcja zwraca 'undefined' (lub nic nie zwraca), okno dialogowe nie pokazuje się (działa również w FF) .Próbowałem zwracając true/false/null, a IE po prostu wstawił "true"/"false"/"null" jako tekst w oknie dialogowym.Nie ma pojęcia dlaczego.Myślę, że to pomaga komuś innemu. –