Cập nhật (2017)
Các trình duyệt hiện đại hiện coi việc hiển thị một thông báo tùy chỉnh là một mối nguy hiểm bảo mật và do đó nó đã bị xóa khỏi tất cả chúng. Trình duyệt bây giờ chỉ hiển thị tin nhắn chung. Vì chúng ta không còn phải lo lắng về việc đặt tin nhắn, nên nó đơn giản như:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Đọc dưới đây để hỗ trợ trình duyệt cũ.
Cập nhật (2013)
Câu trả lời ban đầu phù hợp với IE6-8 và FX1-3.5 (đó là những gì chúng tôi đã nhắm mục tiêu trở lại vào năm 2009 khi nó được viết), nhưng hiện đã hết hạn và sẽ không hoạt động trong hầu hết các trình duyệt hiện tại - Tôi đã rời đi nó dưới đây để tham khảo.
Điều window.onbeforeunload
này không được đối xử nhất quán bởi tất cả các trình duyệt. Nó phải là một tham chiếu hàm và không phải là một chuỗi (như câu trả lời ban đầu đã nêu) nhưng nó sẽ hoạt động trong các trình duyệt cũ hơn vì việc kiểm tra hầu hết trong số chúng dường như là có bất cứ thứ gì được gán cho onbeforeunload
(bao gồm cả hàm trả về null
).
Bạn đặt thành window.onbeforeunload
tham chiếu hàm, nhưng trong các trình duyệt cũ hơn, bạn phải đặt returnValue
sự kiện thay vì chỉ trả về một chuỗi:
var confirmOnPageExit = function (e)
{
// If we haven't been passed the event get the window.event
e = e || window.event;
var message = 'Any text will block the navigation and display a prompt';
// For IE6-8 and Firefox prior to version 4
if (e)
{
e.returnValue = message;
}
// For Chrome, Safari, IE8+ and Opera 12+
return message;
};
Bạn không thể confirmOnPageExit
thực hiện kiểm tra và trả về null nếu bạn muốn người dùng tiếp tục mà không có tin nhắn. Bạn vẫn cần xóa sự kiện để bật và tắt sự kiện một cách đáng tin cậy:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Câu trả lời gốc (làm việc năm 2009)
Bật lên:
window.onbeforeunload = "Are you sure you want to leave?";
Để tắt nó:
window.onbeforeunload = null;
Hãy nhớ rằng đây không phải là một sự kiện bình thường - bạn không thể liên kết với nó theo cách tiêu chuẩn.
Để kiểm tra giá trị? Điều đó phụ thuộc vào khung xác nhận của bạn.
Trong jQuery, đây có thể là một cái gì đó giống như (ví dụ rất cơ bản):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});