2011-04-09 26 views

Trả lời

13

Bạn không thể. Làm mới trang giống như điều hướng và dỡ DOM, do đó sự kiện onbeforeunload sẽ luôn được gọi.

+0

Cảm ơn, chúng ta có thể làm cho nó xảy ra bằng cách đặt CỜ, nếu có, làm thế nào tôi có thể xác định trang đang được làm mới bằng cách nhấn F5? – mymotherland

+0

@ Dinesh, toàn bộ câu trả lời của tôi là điều này không thể được thực hiện bởi vì bạn không thể phân biệt giữa người dùng nhấn F5 và người dùng nhấp vào liên kết để điều hướng. –

+0

OK Darin, Cảm ơn một lần nữa – mymotherland

4

Đối với những gì bạn đang tìm kiếm, cách tốt nhất để kiểm soát việc làm mới trang web là với chức năng onKeyDown. Rất tiếc, nhấn nút làm mới trực tiếp từ trình duyệt của bạn sẽ tải lại DOM, vì vậy về mặt kỹ thuật không có cách nào để ngăn không cho làm mới từ hành động này.

Đi vào cùng một vấn đề, tôi tìm thấy trang web này http://asquare.net/javascript/tests/KeyCode.html nơi bạn có thể xác minh phản hồi của trình duyệt của bạn với các sự kiện bàn phím. Ở đây bạn có thể bắt đầu tìm ra lý do tại sao onKeyDown là lựa chọn tốt nhất. Chrome không phản ứng với hàm onKeyPress.

Bạn chỉ cần một biến để kiểm soát hành động làm mới. Nếu người dùng nhấn phím, thì hành động onBeforeUnload sẽ không được thực thi.

var refresh = false; //Control variable to control refresh access 
j$(window).bind('beforeunload', function(){ 
    if (refresh == false) { // If F5 is not pressed 
     return "Do you really want to leave?"; 
    } 
}); 
j$(window).keydown(function(event) { 
    if (event.keyCode == 116) { // User presses F5 to refresh 
    refresh = true; 
    } 
}); 
+0

Làm việc cho tôi trong Chrome. Giải pháp một phần tốt. –

+0

trong trường hợp sự kiện của tôi.keyCode đang hiển thị không xác định. –

1

Có hai điều cần xem xét. (1) Chức năng "window.onbeforeunload" thực hiện khi phím f5 được giải phóng (onkeyup). Bất cứ điều gì để sửa đổi diện mạo đối thoại phải xảy ra trước đó như onkeydown. (2) Hàm sẽ không hoạt động nếu trả về được theo sau bởi một giá trị null.

Nếu bạn đặt biến toàn cầu để sử dụng làm giá trị trả về VÀ làm cho nó rỗng nếu phím f5 được nhấn, hộp thoại sẽ không xuất hiện khi f5 được sử dụng để làm mới. Tuy nhiên nó xuất hiện nếu nút "Đóng" được nhấn. Lưu ý rằng mã bên trong "onbeforeunload" sẽ chạy ngay cả khi giá trị trả về là null, do đó bạn phải kiểm tra giá trị trả lại nếu bạn muốn mã bị vô hiệu hóa.

document.onkeydown = KeyCheck; 
window.returnMessage="You are now logged out."; 
function KeyCheck(e) { 
    var key = (window.event) ? event.keyCode : e.keyCode; 
    alert(key); 
    if(key==116) {window.returnMessage=null;} 
    } 
$(function(){ 
    window.onbeforeunload = function(event) { 
     if(window.returnMessage.length > 0) {logoutFunction();} 
     return window.returnMessage; 
     } 
    }); 
Các vấn đề liên quan