Verlassen einer Seite abfangen

DiDiJo

Erfahrenes Mitglied
Hallo Leute ...

ich habe mir mein eigenes CMS System aufgebaut und hab nun ein kleines Problem..

Wenn sich ein User auf der Seite zum Edittieren der Content-Seiten befindet, möchte ich gerne eine Meldung rauswerfen, wenn der User die Seite verlässt obwohl er vorher zumindest schonmal den "Focus" auf das Formular gesetzt hat. Beispiel:

------------------------------------------------------------------------------------------------------------

Sie sind dabei die Seite zu verlassen, obwohl Sie schon Daten verändert haben. Möchten Sie die Seite wirklich verlassen?

[ JA ] [ NEIN ]

------------------------------------------------------------------------------------------------------------

Ich hab ein wenig rumgeforscht und hab herausgefunden, dass JS den Event "onunload" unterstüzt. Damit könnte ich theoretisch alles abfangen aber ich weiß nicht wie ich das Verlassen der Seite stoppen kann.

Gerade hab ich mal folgendes versucht:

HTML:
<body onunload="pruefeSiteEditSubmit()">
...
</body>

die Funktion sieht bis jetzt nur so aus:
Code:
function pruefeSiteEditSubmit() {
	return false;	
}

Gibt die Funktion true zurück (alles in Ordnung ODER Meldung mit Ja bestätigt), so kann man die Seite verlassen
Gibt die Funktion false zurück (Fehler ODER Meldung mit Nein bestätigt), so bleibt man auf der Seite

kann mir da vlt. jemand auf die Sprünge helfen ... ich komm selber net weiter ...

mfg

DiDi
 
Jau ... die Confirm-"Methode" nutze ich gerade.


Die Funktion sieht so aus:
Code:
function pruefeSiteEditSubmit() {
	//return false;	
	el = document.getElementById('editpage');
	/*
	if (el.action == 'javascript;')
	  return true;
    else {
		if (el.leaveCheck.value == 'focus'){
			return false;
		} else {
			return true;	
		}		  
	}
	return true;*/
	
	if (el.leaveCheck.value == ''){
		return true;	
	}else if (el.leaveCheck.value == 'focus'){
		check = confirm("Wollen Sie die Seite wirklich verlassen? Nicht gespeichert Änderungen gehen dabei verloren.")	
		return check;
	} else {
		return true;	
	}		  
}

Mein Formular sieht inetwa so aus:
HTML:
<body onbeforeunload="return pruefeSiteEditSubmit();">
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="editpage" id="editpage" onclick="document.editpage.leaveCheck.value='focus'">

[...]

<input type="hidden" name="leaveCheck" id="leaveCheck" value="" />
<input type="button" name="submit" onclick="document.editpage.leaveCheck.value='submit';document.editpage.submit()" value="Speichern">
</form>
</body>

Lasse ich in dem body-Tag das return stehen, dann kriege ich aus irgendeinem Grund 2 Abfragen, die ich bestätigen muss. Die zweite Anfrage (wo ich keine Ahnung hab wo die herkommt) funktioniert auch (die Seite wird beim Klick auf "Abbrechen" nicht verlassen).

Hier mal die funktionierende Meldung:
Code:
Soll diese Seite wirklich verlassen werden?

Wählen Sie OK, um forzufahren, oder Abbrechen um auf der aktuiellen Seite zu bleiben

ich vermute mal das ist irgendeine Standart meldung. Aber warum erscheint diese ?

Meine Anfrage dagegen scheint nix zu bewirken. Lasse ich nämlich das return im Body Tag weg, so wird auch nur eine Confirm-Nachricht ausgegeben (meine Nachricht). Drücke ich darauf aber auf Abbrechen, wird die aktuelle Seite totzdem Verlassen.
 
Hi,

wie du schon richtig erkannt hast, handelt es sich um eine Standardmeldung, die erscheint, wenn das Defaultereignis (Entladen der Seite) abgebrochen werden soll. Dieser Dialog kann nicht unterbunden werden.

Siehe MSDN unter Remarks:
When a string is assigned to the returnValue property of window.event, a dialog box appears that gives users the option to stay on the current page and retain the string that was assigned to it. The default statement that appears in the dialog box, "Are you sure you want to navigate away from this page? ... Press OK to continue, or Cancel to stay on the current page.", cannot be removed or altered.
Quelle: MSDN

Ciao
Quaese
 
nun gut ... wenn ich die Standartmeldung nicht abstellen kann ... wie kann ich es einstellen, dass diese meldung nur kommt, wenn Sie soll ?!. Sprich sie soll nur ausgeführt ewrden, wenn eigentlich mein CONFIRM ausgeführt wird
 
Hi,

wann die Meldung erscheint, steht doch in der angegebenen Quelle.

Beispiel:
Code:
window.onbeforeunload = function(){
  return false;
}

Durch die Rückgabe des booleschen Wertes false wird versucht, das Defaultereignis abzubrechen. Das hat das Öffnen des Dialogs zur Folge.

Ciao
Quaese
 
ich weiß nicht ob ich das jetzt komplett falsch vestehe ... aber die Funktion die ich bei onbeforeunload aufrufe liefert entsprechende TRUE oder FALSE Werte ... warum also kriege ich 2 nachrichten ... oder wie kriege ich es hin, dass nur die standartmeldung erscheint wenn sie soll ....

##EDIT1##

das ist mein stand der dinge .. .alles funktioniert, aber nach der abfrage verlasse ich immernoch die seite (ganz egal ob ich das return check in meiner pruefeSiteEditSubmit() Funktion stehen lasse oder nicht) ... das macht keinen Sinn weil die Funktion ja mehr als genug relturn values liefert

HTML:
<body onbeforeunload="pruefeSiteEditSubmit();">

<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="editpage" id="editpage" onclick="focusFormular();">

[...]

<input type="hidden" name="leaveCheck" id="leaveCheck" value="" />

<input type="submit" onclick="document.editpage.leaveCheck.value='submit';" value="Speichern">
</form>

Code:
function pruefeSiteEditSubmit() {
	el = document.getElementById('editpage');
	
	if (el.leaveCheck.value == ''){
		//alert ('value == leer');
		return true;	
	}else if (el.leaveCheck.value == 'submit'){
		//alert ('value == submit');
		return true;
	}else if (el.leaveCheck.value == 'focus'){
		//alert ('abfrage');
		check = confirm("Wollen Sie die Seite wirklich verlassen? Nicht gespeichert Änderungen gehen dabei verloren.");	
		//return check;
		//return false;		
	}
	return true;
}

function focusFormular() {
	el = document.editpage.leaveCheck;
	if (el.value == '') {
		el.value = 'focus';
	}		
}


##EDIT2##

also ich habs jetzt ans laufen gerbacht ...

und zwar so:

Code:
function focusFormular() {
	el = document.editpage.leaveCheck;
	if (el.value == '') {
		el.value = 'focus';
	}		
}

HTML:
<body>

<script type="text/javascript">
	window.onbeforeunload = function() {
		el = document.getElementById('editpage');		
		if (el.leaveCheck.value == ''){
			window.onbeforeunload = null;	
		}else if (el.leaveCheck.value == 'submit'){
			window.onbeforeunload = null;
		}else if (el.leaveCheck.value == 'focus'){
			return false;		
		}
		window.onbeforeunload = null;
	}
</script>

<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="editpage" id="editpage" onclick="focusFormular();">

[....]

<input type="hidden" name="leaveCheck" id="leaveCheck" value="" />
<input type="submit" onclick="document.editpage.leaveCheck.value='submit';" value="Speichern">

</body>

vlt kanns ja wer gebrauchen ...
 
Hallo zusammen,

ich bin gerade an einem ähnlichen Fall.

Wenn man auf einer Seite ist darf man diese nur verlassen, wenn man einen Submit Button gedrückt hat, d.h. bevor man nicht gespeichert hat, ist ein Verlassen einer bestimmten Seite nicht möglich.

Ich habe schon ein Ansatz über die window.onbeforeunload Funktion, aber ich weiß nicht wie ich das Verlassen eine Seite über javascript realisieren kann?

Gruß Toadkopf
 
Zurück