2010-12-13 64 views
10

tôi cần hiển thị hộp thoại xác nhận trước khi đóng cửa sổ trình duyệt bằng javascript hoặc PHP. hộp xác nhận sẽ xuất hiện khi tôi nhấp vào nút đóng của trình duyệt. khác khôn ngoan không hiển thị hộp thoại. hãy giúp tôi bất kỳ.Xác nhận hộp thoại khi tôi đóng trình duyệt?

Trả lời

22

Bạn nên xử lý sự kiện onbeforeunload ...

function closeEditorWarning(){ 
    return 'Are you sure?' 
} 
window.onbeforeunload = closeEditorWarning; 

Hoặc sử dụng jquery, window.attachEvent/window.addEventListener để làm điều đó độc đáo

+3

Và bạn có thể quay trở lại 'undefined' từ gọi lại, bạn nên chủ trương tiêu diệt các hộp thoại xác nhận, ví dụ sau khi xác minh rằng người dùng chưa bắt đầu viết hoặc chỉnh sửa nội dung nào đó. Tuy nhiên, nếu bạn trả về 'null' hoặc' false', IE sẽ hiển thị một thông báo yêu cầu bạn gần đúng nếu bạn muốn * null * hoặc * false *, đủ kỳ quặc. – KajMagnus

+1

Tôi có thể thực thi bất kỳ mã nào khi nhấp vào nút lưu lại trên trang không? –

-3
function doUnload() 
{ 
    // use confirm dialog box here 
    confirm("Window is closing..."); 

} 

<body onunload="doUnload()"> 
+1

onbeforeunload là trình xử lý sự kiện để sử dụng. – mplungjan

1

onunload không phải là rất hữu ích (trong tôi ý kiến) vì bạn không thể làm bất kỳ điều gì với số atmà bạn đang yêu cầu (ngoại trừ có thể thử một cửa sổ mới khác với window.open, vì vậy onbeforeunload hữu ích hơn đối với trường hợp này.

Đặt cược của bạn tốt hơn là onbeforeunload, điều này thật tuyệt vời nhưng sẽ không hoạt động trong Opera (mặc dù điều này thường không phải là công cụ xử lý giao dịch).

Giống như ivy nói, nó sẽ giống như thế này:

<script> 

    var userIsEditingSomething; // set this if something crazy happens 
     oldOnBeforeUnload = window.onbeforeunload; 

    window.onbeforeunload = function() { 
     // attempt to handle a previous onbeforeunload 
     if ('function' === typeof oldOnBeforeUnload) { 
      var message = oldOnBeforeUnload(); 
      if ('undefined' !== typeof message) { 
       if (confirm('string' === typeof message ? message : 'Are you sure you want to leave this page?')) { 
        return; // allow user to exit without further annoying pop-ups 
       } 
      } 
     } 
     // handle our own 
     if (userIsEditingSomething) { 
      return 'Are you sure you want to exit?'; 
     } 
    }; 

</script> 
+0

VÀ nó sẽ kích hoạt bất cứ khi nào người dùng rời khỏi trang vì bất kỳ lý do gì. KHÔNG chỉ khi đóng trình duyệt – mplungjan

+0

Bạn nói đúng. Mặc dù có thể có sự trừu tượng tốt cho vấn đề này (jquery etc), nhiều năm trước tôi đã sử dụng để kiểm tra điều kiện "(event.clientX <0 || event.clientY <0)" để phân biệt giữa ai đó nhấn nút đóng cửa sổ (điều kiện là đúng) và hành động điều hướng thông thường (theo một liên kết, gửi biểu mẫu, quay lại, chuyển tiếp). Đây không phải là giải pháp chống lỗi (ví dụ: ALT-F4 không bị bắt), vì vậy tôi hy vọng ai đó có thể cung cấp cho bạn giải pháp tốt hơn. – ivy

Các vấn đề liên quan