2011-10-21 26 views
5

tôi có một trang mà tôi muốn xác nhận nếu người dùng muốn thoát. tôi phải xác nhận chỉ khi một điều kiện nhất định được đáp ứng vì vậy tôi đã viết mã như thế nàylàm cách nào để ngăn chặn onbeforeunload kích hoạt khi một điều kiện nhất định được đáp ứng?

var back=false; 
back=//check if user pressed back button 
window.onbeforeunload = function (e) { 
    alert(back); //this alerts true 
    if(back==true) 
     return false; 
     //e.preventDefault; --this does not work too 
}; 

nhưng điều này không hoạt động. tôi có nghĩa là khi tôi bấm vào nút quay lại onbeforeunload này vẫn còn cháy và tôi vẫn nhận được thông báo xác nhận ngay cả khi tôi trở về false.Whats có thể là sai? Cảm ơn

Trả lời

11

Trả lại chuỗi nếu bạn muốn cung cấp tùy chọn cho người dùng hủy bỏ quá trình tải. Không trả lại gì trong các trường hợp khác.

var back = false; 
back = true; //Somewhere, the condition is set to true 
window.onbeforeunload = function (e) { 
    if(back == true) 
     return "Are you sure to exit?"; 
} 
+1

Không bạn không thể thay đổi thông báo xác nhận, haha ​​(đùa) – david

+1

trình duyệt @lovesh có việc thực hiện riêng của họ về hộp thoại xác nhận 'onbeforeunload' với văn bản tiêu chuẩn sẽ luôn hiển thị và không phải tất cả chúng sẽ hiển thị văn bản bạn đã trả lại cho người dùng. –

+0

@lovesh 'return false' trong mã của bạn ** đã hoạt động **. Bạn đã quên đặt 'back = true'. –

0

Bạn cũng có thể xem xét không đặt sự kiện window.beforeunload cho đến khi danh sách các điều kiện của bạn được đáp ứng.

var confirmUserToLeave = function() { 
    if (/* conditions are met */) { 
     window.unbeforeunload = function (e) { 
      /* whatever you want to do here */ 
     }; 
    } else { 
     window.unbeforeunload = undefined; 
    } 
}; 

Sau đó, chỉ cần gọi phương thức đó vào các sự kiện nhất định có thể thay đổi kết quả của 'điều kiện được đáp ứng'.

+0

bất kỳ ý tưởng tại sao 'return false' trong mã của tôi đã không hoạt động? – lovesh

1
$(window).bind('beforeunload',function() { 
    return "'Are you sure you want to leave the page. All data will be lost!"; 
}); 

$('#a_exit').live('click',function() { 
    $(window).unbind('beforeunload'); 
}); 

Hãy thử điều này. Mã trên đang làm việc trong hầu hết các điều kiện.

0

Điều kiện cho back-end

var confirmExist = function (e) { 
    return true; 
} 
window.onbeforeunload = confirmExist; 
http get, post request 
.then(function(r)) { 
    window.onbeforeunload = null; 
} 
Các vấn đề liên quan