Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menangkap Acara Tutup Tetingkap Penyemak Imbas Tanpa Mencetuskan pada Penyerahan Borang atau Hiperpautan?

Bagaimanakah Saya Boleh Menangkap Acara Tutup Tetingkap Penyemak Imbas Tanpa Mencetuskan pada Penyerahan Borang atau Hiperpautan?

Susan Sarandon
Susan Sarandonasal
2024-12-07 12:56:14546semak imbas

How Can I Capture Browser Window Close Events Without Triggering on Form Submissions or Hyperlinks?

Merakam Acara Tutup Tetingkap Penyemak Imbas Semasa Mengecualikan Penyerahan Borang dan Hiperpautan

Acara sebelum pemuatan dalam jQuery direka untuk mengesan apabila pengguna meninggalkan halaman . Walau bagaimanapun, peristiwa ini juga tercetus semasa penyerahan borang, yang mungkin tidak diingini dalam senario tertentu. Artikel ini meneroka pendekatan untuk mengecualikan penyerahan borang dan hiperpautan (kecuali daripada bingkai lain) daripada acara sebelum pemunggahan.

Untuk mencapai ini, kami mula-mula memulakan pembolehubah inFormOrLink kepada palsu. Apabila pengguna mengklik pada hiperpautan atau menyerahkan borang, kami menetapkan inFormOrLink kepada benar.

Dalam pengendali acara beforeunload, kami menyemak nilai inFormOrLink. Jika ia benar, kami menggesa pengguna untuk pengesahan dengan mesej "Adakah anda benar-benar mahu menutup?" Sebaliknya, jika inFormOrLink adalah palsu, kami mengembalikan null untuk menyekat gesaan pengesahan.

Berikut ialah coretan kod yang disemak untuk jQuery versi 1.7 dan ke atas:

var inFormOrLink = false;
$('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 di bawah 1.7, gunakan kod berikut:

var inFormOrLink = false;
$('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; 
});

Pendekatan ini dengan berkesan menangkap peristiwa penutupan tetingkap penyemak imbas sambil tidak termasuk penyerahan borang dan hiperpautan (kecuali daripada bingkai lain).

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Acara Tutup Tetingkap Penyemak Imbas Tanpa Mencetuskan pada Penyerahan Borang atau Hiperpautan?. 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