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?") } )
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; })
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!