Heim > Web-Frontend > js-Tutorial > Wie erfasst man Ereignisse beim Schließen von Browserfenstern, ohne dass die Formularübermittlung beeinträchtigt wird?

Wie erfasst man Ereignisse beim Schließen von Browserfenstern, ohne dass die Formularübermittlung beeinträchtigt wird?

Susan Sarandon
Freigeben: 2024-12-29 11:15:11
Original
442 Leute haben es durchsucht

How to Capture Browser Window Close Events without Form Submission Interference?

Erfassen von Browserfenster-Schließereignissen ohne Formularinterferenz

Es ist üblich, ein Ereignis zu wünschen, das speziell dann ausgelöst wird, wenn ein Browserfenster (oder eine Registerkarte) geschlossen wird . Allerdings reagiert auch das Ereignis beforeunload, das typischerweise zu diesem Zweck genutzt wird, auf Formularübermittlungen. Wie können wir formularbezogene Aktionen vom Auslösen dieses Ereignisses ausschließen?

Antwort:

Das beforeunload-Ereignis wird immer dann ausgelöst, wenn der Benutzer die aktuelle Seite verlässt, unabhängig vom Grund . Dazu gehören Formularübermittlungen, Linkklicks und die direkte Navigation zu einer anderen Seite. Um diese Aktionen auszuschließen, können wir den folgenden Code nutzen:

var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });

$(window).on("beforeunload", function() { 
    return inFormOrLink ? "Do you really want to close?" : null; 
})
Nach dem Login kopieren

Alternativ wird bei Verwendung von jQuery-Versionen vor 1.7 Folgendes empfohlen:

var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });

$(window).bind("beforeunload", function() { 
    return inFormOrLink ? "Do you really want to close?" : null; 
})
Nach dem Login kopieren

In dieser Lösung wann Wenn der Benutzer auf einen Hyperlink klickt oder ein Formular sendet, wird ein Flag inFormOrLink auf „true“ gesetzt. Während des Beforeunload-Ereignisses wird dieses Flag überprüft, und wenn es falsch ist, wird das Ereignis nicht erfasst.

Wichtiger Hinweis:

Es ist zu beachten, dass andere Ereignishandler dies möglicherweise tun Verhindern Sie das Absenden von Formularen oder die Navigation. In solchen Fällen wird das Ereignis „beforeunload“ immer noch ausgelöst, wenn das Fenster geschlossen wird, was dazu führt, dass eine Bestätigungsaufforderung verloren geht. Um dies zu mildern, erfassen Sie die Zeit in Klick- und Übermittlungsereignissen und prüfen Sie, ob der Vorab-Entladevorgang wesentlich später erfolgt, um die Bewältigung solcher Situationen zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWie erfasst man Ereignisse beim Schließen von Browserfenstern, ohne dass die Formularübermittlung beeinträchtigt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage