2013-01-31 23 views
6

Tôi đang sử dụng mã JavaScript sau để cảnh báo người dùng nếu anh ta cố chuyển hướng đến một trang khác mà không gửi biểu mẫu.Không yêu cầu xác nhận nếu người dùng gửi biểu mẫu

window.onbeforeunload = function() { 
    return 'Are you sure that you want to leave this page?'; 
}; 

Điều này đang hoạt động tốt.Nhưng vấn đề của tôi là khi người dùng cố gắng gửi biểu mẫu bằng cách sử dụng nút xác nhận nút gửi sẽ xuất hiện. Tôi không muốn hỏi xác nhận nếu người dùng gửi biểu mẫu, nếu không tôi muốn hỏi xác nhận. Làm thế nào là nó có thể?

+1

hãy kiểm tra 'onbeforeunload'. Tôi nghĩ rằng nó không hoạt động hoặc trong chrome hoặc firefox – Ashwin

+0

Tôi tìm thấy vì nó hoạt động tốt với cả chrome và Firefox.Nhưng cả hai đều phản hồi khác nhau. Trong trường hợp của tôi, Firefox yêu cầu "Trang này yêu cầu bạn xác nhận rằng bạn muốn thoát - dữ liệu bạn đã nhập có thể không được lưu." Nhưng chrome yêu cầu xác nhận "bạn có chắc chắn rời khỏi trang Bạn có chắc chắn muốn thoát khỏi trang này không?" – shihabudheen

Trả lời

8

duy trì biến trạng thái. khi người dùng nhấp vào nút gửi, hãy đặt trạng thái thành userSubmitted=True;
biến trạng thái có thể bao gồm biến toàn cục hoặc kiểm soát ẩn.

var userSubmitted=false; 

$('form').submit(function() { 
userSubmitted = true; 
}); 

sau đó kiểm tra như thế này

window.onbeforeunload = function() { 
    if(!userSubmitted) 
     return 'Are you sure that you want to leave this page?'; 
}; 

PS: kiểm tra chéo để tương thích onbeforunload cho trình duyệt chéo.

2

Đơn giản.

Chỉ cần có một biến toàn cầu

var can_leave = false; 

vào mẫu của bạn:

$('form').submit(function() { 
... 
... 
can_leave = true; 
}); 

Và bên trong handler onbeforeunload() bạn có điều này:

window.onbeforeunload = function() { 
if (!can_leave) return 'Are you sure that you want to leave this page?'; 
}; 
Các vấn đề liên quan