2012-05-01 30 views
15

Tôi phải thực hiện một số thao tác trên trang làm mới hoặc tải lại. đó là khi tôi nhấn trang tiếp theo hoặc Lọc hoặc làm mới trên lưới. Tôi cần hiển thị một số hộp xác nhận trong Sự kiện này.Cách kiểm tra trang đang tải lại hoặc làm mới bằng jquery hoặc javascript?

có sự kiện nào có thể cho bạn biết trang đang làm filer không? làm mới hoặc phân trang? sử dụng javascript?

Cảm ơn

Trả lời

18

Nếu làm mới, window.onunload sẽ kích hoạt.

// From MDN 
window.onunload = unloadPage; 
function unloadPage() 
{ 
    alert("unload event detected!"); 
} 

https://developer.mozilla.org/en/DOM/window.onunload

Nếu bạn chỉ muốn một hộp thoại xác nhận để cho phép họ ở lại, sử dụng này:

window.onbeforeunload = function() { 
    return "Are you sure you want to navigate away?"; 
} 
+0

1 .. một chính xác hơn .. làm việc trong tất cả các trình duyệt – agpt

+4

này cũng sẽ cháy khi người dùng đóng trình duyệt hoặc trang hoặc khi người dùng cố gắng để di chuyển xa. – MetalPhoenix

+0

@MetalPhoenix tất nhiên nó sẽ. Không cần phải downvote trên một cái gì đó bất kỳ nhà phát triển có thẩm quyền sẽ nhận ra. – AlienWebguy

3

Bạn có thể tạo ra một lĩnh vực ẩn và thiết lập giá trị của nó trên tải trang đầu tiên. Khi trang được tải lại, bạn có thể kiểm tra trường ẩn. Nếu nó trống thì trang được tải lần đầu tiên, nếu không trang được làm mới. Một số điều như thế này:

HTML

<body onLoad="CheckPageLoad();"> 

    <input type="hidden" name="visit" id="visit" value="" /> 

</body> 

JS

function CheckPageLoad() { 
    if (document.getElementById("visit").value == "") { 
     // This is a fresh page load 
     document.getElementById("visit").value = "1"; 
    } 
    else { 
     // This is a page refresh 
    } 
}​ 
+0

Hmm, nhưng giá trị sẽ luôn được làm trống khi bạn làm mới. Vì vậy, nó không bao giờ có thể xác định nếu trường trước đây đã có một giá trị. –

+0

Điều này có thể ổn nếu trang lưu trữ trạng thái điều khiển trong chế độ xem. Vấn đề là làm thế nào để giải quyết một trang phức tạp hơn gây ra postbacks. Nếu đây là một trang đơn giản dựa trên tương tác của người dùng mà sau đó có thể đặt một giá trị trong trường đó, thì đây là một giải pháp tuyệt vời. Tuy nhiên, nếu trang gây ra nhiều lần đăng lại với nhiều trường để người dùng điền vào, nó sẽ trở thành không thể đánh giá được. – MetalPhoenix

1

Có một số giải thích ghi chú trên đấu vật với điều này tôi nghĩ là quan trọng.

Đầu tiên, hệ thống trường làm mới/ẩn hoạt động ở đầu bản sao trang mới và sau đó, không phải trên bản sao trang đầu tiên.

Từ nghiên cứu của tôi về phương pháp này và một vài cách khác, không có cách nào, chủ yếu là do các tiêu chuẩn về quyền riêng tư, để phát hiện một trang làm mới trong quá trình tải hoặc trước đó. chỉ sau khi tải trang mới và sau đó.

Tôi đã có một yêu cầu vấn đề tương tự, nhưng về cơ bản nó đã chấm dứt phiên họp về lối ra của trang, và khi nhìn qua đó, phát hiện ra rằng một trình duyệt đối xử với một tải lại/làm mới như hai mảnh riêng biệt:

  1. đóng cửa sổ hiện tại (kích hoạt onbeforeunload và onunload js events).
  2. yêu cầu trang như thể bạn chưa bao giờ có trang đó. Phiên trên máy chủ của khóa học không có vấn đề, nhưng không có thay đổi chuỗi truy vấn/giá trị gia tăng vào url được sử dụng cuối cùng của trang.

Điều này cũng xảy ra theo thứ tự đó. Chỉ một trình duyệt tùy chỉnh hoặc không chuẩn sẽ hoạt động khác nhau.

1
$(function() { 
    if (performance.navigation.type == 1) { 
     yourFunction(); 
    } 
}); 

Thông tin thêm về PerformanceNavigation đối tượng được trả về bởi performance.navigation

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