Alternative zu onunload() gesucht

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Seite wo man gewisse Einstellungen vornehmen kann.
Nun möchte ich aber verhindern das der Benutzer die Seite verlassen kann, ohne die Änderungen gespeichert zu haben.
Dazu habe ich ein alert() und onunload() benutzt.
Also beim Verlassender Seite kommt eine Meldung und das verlassen der Seite wird verhindert.

Nun ist es aber so das die Meldung auch beim aktualisieren oder beim Speichern der Änderungen erscheint.

Gibt es evtl. eine andere Möglichkeit?
Mit der Meldung beim aktualisieren könnte ich Leben.

Meine Idee wäre:

Beim absenden des Formulares, das ausführen der Funktion, welche im onunload() Event ausgeführt wird, zu verhindern. Geht das?!
Also in einer Funktion die ausgeführt wird, das ausführen einer anderen Funktion zu verhindern oder blockieren.

Ich hab leider keine andere Idee.

Danke und Gruß
 
Wieso prüfst du nicht vor dem Ausführen von alert, ob es ungespeicherte Änderungen gibt?
Nimm dir dazu einfach eine Variable.

Javascript:
//die Variable wird bei jeder Änderung auf true gesetzt
var unsavedChanges = false;

window.onunload = function() {
    if(unsavedChanges)
        alert('Es sind noch ungespeicherte Änderungen vorhanden!');
}

Natürlich kannst du jetzt beim Absenden des Formulars die Variable auf false setzen.
 
Ok das ist eine Idee.
Allerdings klappt es nicht so wie ich das möchte.

Ich setze die Variable "aenderungen" global auf true (zum testen).

In der Funktion status_check(), die beim klicken des submit Buttons, ausgeführt wird setze ich die Variable "aenderungen" auf false. Weil ich ja an dieser Stelle nicht will das die Funktion zum Prüfen der Änderungen ausgeführt wird.

Javascript:
var aenderungen = true;

function status_check()
{

var aenderungen = false;

var email_senden  = document.getElementById('notify').value;
var email_betreff = document.getElementById('email_betreff').value;
var email_text    = document.getElementById('comments').value;


var pdf_senden  = document.getElementById('notify_pdf').value;
var pdf_text    = document.getElementById('pdf_text').value;
var pdf_art    = document.getElementById('pdf_art').value;
var pdf_text    = document.getElementById('comments_pdf').value;

if(email_senden == 1 && email_betreff == 0){
alert("Wenn Sie den Kunden benachrichtigen wollen, dann müssen Sie einen Betreff für die Email angeben!");
dhtml.nTab('tab1');
document.getElementById('email_betreff').focus();
return false
}else

if(email_senden == 1 && email_text == 0){
alert("Wenn Sie den Kunden benachrichtigen wollen, dann müssen Sie einen Text für die Email erstellen! Sie können dazu eine Textvorlage verwenden.");
dhtml.nTab('tab1');
document.getElementById('comments').focus();
return false
}else


if(pdf_art == 0){
alert("Bitte geben Sie einen Typ für das PDF Dokument an.\n\nHinweis:\n\nFür jeden Bestellstatus wird ein PDF Dokument erstellt, welches Sie später im Verlauf ausdrucken oder an dieser Stelle, dem Kunden als Email Anhang, senden können.");
dhtml.nTab('tab1');
document.getElementById('pdf_art').focus();
return false
}else
if(pdf_senden == 1 && pdf_text == 0){
alert("Bitte geben Sie einen Text für das PDF Dokument an. Sie können dazu eine Textvorlage verwenden.\n\nHinweis:\n\nFür jeden Bestellstatus wird ein PDF Dokument erstellt, welches Sie später im Verlauf ausdrucken oder an dieser Stelle, dem Kunden als Email Anhang, senden können.");
dhtml.nTab('tab1');
document.getElementById('comments_pdf').focus();
return false
}else{

if(email_senden == 1){
alert("Die Email wurde erfolgreich gesendet und die Bestellung aktualisiert!");
}else{
alert("Die Bestellung wurde erfolgreich aktualisiert!");
}


}
}

window.onunload = function() {
    if(aenderungen == true)
        alert('Es sind noch ungespeicherte Änderungen vorhanden!');
}

Leider bleibt die Variable immer auf true.
Muss ich "aenderungen" anders deklarieren, wenn ich diese global haben möchte?

Gruss
 
Zuletzt bearbeitet von einem Moderator:
Deklariert hast du es völlig korrekt, aber du deklarierst innerhalb von "status_check" eine weitere Variable, mit dem gleichen Namen, welche nur innerhalb der Funktion gültig ist. Nimm das "var" vorne dran weg.
 
Zurück