Ist es möglich, das onbeforeunload-Ereignis programmgesteuert auszulösen?

8

Ich verwende derzeit das jquery-form-observe -Plugin, das onbeforeunload verwendet, um den Aufruf zu bestätigen Benutzer über "nicht gespeicherte" Änderungen.

Aber ich habe ein Szenario, in dem ich dies auf Knopfdruck auslösen muss: Das Klicken auf die Schaltfläche führt schließlich dazu, dass sich die Seite ändert, aber ich möchte den Benutzer vor dem Start des Vorgangs darauf hinweisen, dass der Klick der Schaltfläche startet ...

Gibt es also eine Möglichkeit, onforefunload durch jQuery oder auf andere Weise auszulösen?

    
mutex 16.08.2010, 03:07
quelle

3 Antworten

3

Ich weiß nicht, ob es einen direkten Weg dafür gibt, aber Sie könnten die Bestätigungsbox des Browsers immer selbst emulieren. Hier ist eine einfache Funktion, die ich basierend auf den Spezifikationen in MSDN entwickelt habe:

%Vor%

Bearbeiten: Fügen Sie in jquery.formobserver.js , direkt nach der Definition von function beforeunload(e) { ... } , diese Zeile hinzu:

%Vor%

Beachten Sie die Änderung im ursprünglichen Code: window.onbeforeunload wurde durch handler ersetzt.

    
casablanca 16.08.2010, 03:21
quelle
2

Sie können das mit der Methode .trigger () tun:

%Vor%     
Pat 16.08.2010 03:25
quelle
1

Ich bin über diese Frage gestolpert, als ich nach Antworten auf meine eigene Frage gesucht habe, die in der Natur ähnlich waren. Also, ich habe hier einen Workaround gefunden. Ich musste "onbeforeunload" nur aufrufen, wenn ein Benutzer auf eine bestimmte Schaltfläche und keine der anderen klickt. Hoffentlich wirft das ein wenig Licht auf Ihre Frage.

Ich habe es in jsfiddle arbeiten lassen. Sie können es dort in der von mir eingerichteten Demo testen und sehen deutlich, dass es nur mit einer der Tasten funktioniert. Es gibt jedoch eine Einschränkung, für die ich mich nicht darum gekümmert habe, nach einer Lösung zu suchen. Wenn du auf den Button klickst und auf der Seite bleibst, werden alle nachfolgenden Buttons / Links / Redirects / Reloads "onbeforeunload" auslösen. Du kannst gerne deine eigene Arbeit für den "Bug" erstellen (aus Mangel an besser Bedingungen), um es so zu machen, dass es diese Reaktion nicht verursacht, wenn der Benutzer beschließt, auf der Seite zu bleiben. Es funktioniert jedoch und führt das aus, was Sie in der Testumgebung angefordert haben.

Hier ist der Code:

%Vor%

BEARBEITEN:

Nachdem ich also nach anderen Wegen gesucht habe, um dasselbe zu tun, bin ich auf eine andere Art und Weise gestoßen, um ein Ereignis mit der Schaltfläche zu verknüpfen, indem ich die jQuery-Methode .on () verwende. Der Code kann hier hier eingesehen werden, um sicherzustellen, dass der alte Code auskommentiert ist. Wieder derselbe "Fehler" wie zuvor, aber immer noch die angeforderte Funktionalität.

Hier ist die Alternative:

%Vor%     
Jacob Heater 29.01.2013 21:44
quelle