Sự beforeunload
kiện này kích hoạt bất cứ khi nào người dùng rời khỏi trang của bạn vì bất kỳ lý do gì.
Ví dụ: nó sẽ được kích hoạt nếu người dùng gửi biểu mẫu, nhấp vào liên kết, đóng cửa sổ (hoặc tab) hoặc đi đến một trang mới bằng thanh địa chỉ, hộp tìm kiếm hoặc dấu trang.
Bạn có thể loại trừ việc gửi biểu mẫu và siêu liên kết (ngoại trừ các khung khác) với mã sau:
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;
})
Đối với các phiên bản jQuery cũ hơn 1.7, hãy thử điều này:
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;
})
Các live
phương pháp không làm việc với các submit
sự kiện, vì vậy nếu bạn thêm một hình thức mới, bạn sẽ cần phải ràng buộc xử lý với nó là tốt.
Lưu ý rằng nếu một trình xử lý sự kiện khác hủy bỏ việc gửi hoặc điều hướng, bạn sẽ mất dấu nhắc xác nhận nếu cửa sổ thực sự bị đóng sau đó. Bạn có thể khắc phục điều đó bằng cách ghi lại thời gian trong submit
và click
các sự kiện và kiểm tra xem điều đó có beforeunload
xảy ra sau vài giây không.