2010-01-20 22 views
14

Có cách nào để nắm bắt xem người dùng đã nhấp OK hay CANCEL?Ghi lại phản hồi của người dùng khi sử dụng window.onbeforeunload

tôi cần phải làm một cái gì đó CHỈ nếu người dùng đang rời khỏi trang ....

+0

Theo tôi biết, bạn (vẫn còn, trong năm 2014) phải giả định rằng nếu window.onunload được kích hoạt, thì họ trả lời OK cho câu hỏi onbeforeunload. Tôi đã hy vọng cho một cái gì đó sạch hơn, nhưng vẫn chưa tìm thấy nó. – Patrick

Trả lời

4

Không, trình duyệt cho phép bạn chỉ định các văn bản trong hộp cảnh báo, nhưng không có cách nào để bắt kết quả.

+1

oh tuyệt vời, chức năng này là rất nhiều sử dụng sau đó (mỉa mai). Hoặc chuyển sang onunload – sarsnake

+0

Hoặc điều này hoàn toàn sai hoặc tôi sẽ phát điên. Tôi biết nó có thể hiển thị một hộp thoại xác nhận về dỡ hàng; trang web này làm như vậy nếu bạn nhấn Quay lại trong khi chỉnh sửa bài đăng. – iandisme

+0

@gnomixa bạn đang đùa à? Tôi rất vui vì các trình duyệt không cung cấp khả năng này cho tập lệnh. –

8

Đây là giải pháp tôi đang sử dụng trong một tình huống mà tôi cần phải làm điều gì đó (chẳng hạn như xóa phiên) CHỈ khi người dùng điều hướng từ trang.

tôi có 2 vars toàn cầu

var clearSession = true; 
var confirmExit = true; 


    window.onbeforeunload = function() { return confirmExit(); } 
    window.onunload = function() { return clearSession(); } 

function confirmExit() { 
    if (needToConfirm == true) {  

     return "exit page?"; 
    } 
} 


function clearSession() { 

    if (clearSession == true) { 
     alert("Killing the session on the server!!!"); 
     PageMethods.ClearSession(); 
    } 
} 

Sau đó, tất nhiên, trên mỗi trang trình/nút/danh sách thả xuống vv ... bạn cần phải chắc chắn rằng các biến toàn cầu trên được thiết lập là false.

Hy vọng điều này sẽ giúp ai đó.

1

Bạn có thể sử dụng một setTimeout để xác minh.

window.onbeforeunload = function() { 
    if (needToConfirm) { 
     setTimeout(function() { 
      alert('User still is on the page'); 
     }, 0); 
     return 'Are you sure you want to leave?'; 
    } 
}; 

Về cơ bản, chức năng onbeforeunload chặn thực thi và hết thời gian chờ sẽ chỉ được thực thi nếu người dùng vẫn ở trên trang. 0 mili giây chỉ để đặt nó vào cuối hàng đợi thực hiện.

+0

Điều này trái ngược với những gì được hỏi trong câu hỏi. Câu hỏi đặt ra là (được diễn giải) "Làm cách nào để mã của tôi hoạt động khi người dùng quyết định * rời khỏi * trang". Mã trong hoạt động trả lời của bạn (tăng cảnh báo) khi người dùng * ở lại * trên trang. Tôi khá chắc chắn rằng bạn có thể sửa mã để làm những gì câu hỏi thực sự yêu cầu nhưng sau đó nó sẽ là phương pháp này sẽ cung cấp đó là tốt hơn so với phương pháp được đề xuất bởi [sarsnake] (http://stackoverflow.com/a/ 2103974/1906307)? – Louis

0

Đây là một mẹo lập trình hoặc đúng hơn là cách giải quyết mà bạn có thể thử. Tôi không tìm thấy bất kỳ cách mặc định "javascript được cung cấp" nào để làm điều đó

Tôi có một trang web (có biểu mẫu) đang ngồi trên hệ thống cục bộ cần được bảo vệ khỏi người dùng trái phép. .

Tôi đã tạo một hàm JavaScript tải cùng với tải trang chính.

như dưới đây

<script src="./resources/brazil-uam-all-javascript.js"></script> 
    </head> 
<body id="uam_gui" onload="authenticate2();"> 
<div id="UAM_tool"> 

bây giờ JavaScript CHỨC NĂNG

Người dùng có nghĩa vụ phải nhập một giá trị khi được nhắc với một hộp thoại. Nếu người dùng không nhập bất kỳ giá trị nào và chỉ cố gắng bỏ qua giá trị đó bằng cách nhấp vào OK hoặc HỦY hoặc sử dụng phím ESC hoặc nút "Đóng" để tránh xác thực, thì trang sẽ trả về cùng với lời nhắc tương tự. Ở đây tôi đang gián tiếp thu thập phản hồi của người dùng. Hy vọng nó giúp yêu cầu của bạn.

function authenticate2() { 
var prompt_for_the_magic_number = prompt("Enter Your       M A G I C N U M B E R  ::: ", ""); 
    if (prompt_for_the_magic_number === true) 
    { 
     if (prompt_for_the_magic_number.length === 0) 
     { 
      alert("You are supposed to ENTER A VALUE"); 
      location.reload(); 
     } 
     else 
     { 
      if (prompt_for_the_magic_number.length > 4) 
      { 
       alert("You are supposed to ENTER ONLY 4 DIGITS"); 
       location.reload(); 
      } 
      esle 
      { 
       //some code to allow access based on a logic 
      } 
     } 
    } 
    else 
    { 
     alert("You are supposed to ENTER 4 DIGITS"); 
     location.reload(); 
    } 
} 
Các vấn đề liên quan