Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengesan Penutupan Tetingkap/Tab Penyemak Imbas dengan Amanah Tanpa Mencetuskan Penyerahan Borang?

Bagaimanakah Saya Boleh Mengesan Penutupan Tetingkap/Tab Penyemak Imbas dengan Amanah Tanpa Mencetuskan Penyerahan Borang?

Patricia Arquette
Patricia Arquetteasal
2024-12-20 22:25:17473semak imbas

How Can I Reliably Detect Browser Window/Tab Closure Without Triggering on Form Submissions?

Menentukan Penutupan Tetingkap Penyemak Imbas/Tab

S: Menangkap Acara Penutupan Tetingkap/Tab Penyemak Imbas

Saya ingin tangkap peristiwa tutup tetingkap/tab penyemak imbas, tetapi acara "beforeunload" jQuery juga mencetuskan penyerahan borang. Bagaimanakah saya boleh mengehadkan acara kepada penutupan tetingkap?

J: Mengasingkan Acara Penutupan Tetingkap

Walaupun "beforeunload" mengesan sebarang pelepasan halaman, kami boleh mengecualikan penyerahan borang dan hiperpautan menggunakan kod berikut:

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; 
});

Untuk versi jQuery < 1.7:

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; 
});

Nota: Penyelesaian ini menghalang gesaan pengesahan jika pengendali acara lain membatalkan penyerahan atau navigasi. Untuk menangani perkara ini, rekod masa serah/klik acara dan semak sama ada "sebelum muat" berlaku lebih daripada beberapa saat kemudian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Penutupan Tetingkap/Tab Penyemak Imbas dengan Amanah Tanpa Mencetuskan Penyerahan Borang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn