Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengesan Hanya Peristiwa Tutup Tetingkap Penyemak Imbas dengan Amanah dalam JavaScript?

Bagaimanakah Saya Boleh Mengesan Hanya Peristiwa Tutup Tetingkap Penyemak Imbas dengan Amanah dalam JavaScript?

Barbara Streisand
Lepaskan: 2024-12-23 03:49:52
asal
598 orang telah melayarinya

How Can I Reliably Detect Only Browser Window Close Events in JavaScript?

Peristiwa Tutup Tetingkap Penyemak Imbas: Panduan Komprehensif

jQuery menawarkan acara "beforeunload" untuk menangkap detik apabila pengguna cuba meninggalkan laman web. Walau bagaimanapun, peristiwa ini mencetuskan bukan sahaja untuk penutupan tetingkap, tetapi juga untuk tindakan seperti penyerahan borang. Untuk menangani isu ini, mari kita mendalami butiran menangkap peristiwa penutupan tetingkap penyemak imbas secara khusus.

Acara "beforeunload", seperti namanya, berlaku apabila pengguna menavigasi keluar dari halaman semasa. Ini termasuk penyerahan borang, klik pautan, menutup tetingkap atau tab dan menavigasi ke halaman baharu menggunakan pelbagai cara.

Untuk menggambarkan, pertimbangkan kod jQuery berikut:

jQuery(window).bind(
    "beforeunload",
    function() {
        return confirm("Do you really want to close?")
    }
)
Salin selepas log masuk

Sementara ini coretan kod cuba menangkap peristiwa penutupan tetingkap, ia secara tidak sengaja mencetuskan dialog pengesahan untuk tindakan lain juga, seperti penyerahan borang. Untuk menangani had ini, kita perlu membezakan antara penutupan tetingkap dan acara navigasi lain.

Satu pendekatan melibatkan mengecualikan penyerahan borang dan hiperpautan (tidak termasuk yang daripada bingkai lain) dengan menggunakan kod jQuery 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;
})
Salin selepas log masuk

Dalam kod ini, kami menjejaki jika pengguna sedang berinteraksi dengan borang atau pautan dengan menetapkan pembolehubah inFormOrLink kepada benar pada tindakan yang berkaitan. Semasa acara "beforeunload", kami memaparkan gesaan pengesahan hanya jika pengguna tidak berada dalam borang atau pautan pada masa ini.

Perhatikan bahawa pendekatan ini mungkin menghadapi masalah jika pengendali acara lain membatalkan penyerahan atau navigasi, yang berpotensi menghalang gesaan pengesahan daripada dipaparkan walaupun tetingkap ditutup. Untuk mengurangkan isu ini, pertimbangkan untuk merekodkan masa penyerahan dan klik acara dan sahkan jika acara "beforeunload" berlaku lebih daripada beberapa saat kemudian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Hanya Peristiwa Tutup Tetingkap Penyemak Imbas dengan Amanah dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan