2011-09-20 41 views
7

Tôi gặp vấn đề lạ với jQuery (1.6.x). Tôi có cuộc gọi đơn giản này trên trang của tôi:Tại sao jQuery đôi khi ghi đè lên window.onbeforeunload?

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

Nhưng nó không hoạt động, vì như tôi đã phát hiện ra, jQuery ghi đè nội dung của cửa sổ.trước khi tải lên. Trong JS console, tôi có thể thấy rằng window.onbeforeunload chứa đoạn mã jQuery:

function(e) { 
// Discard the second event of a jQuery.event.trigger() and 
// when an event is called after a page has unloaded 
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 
    jQuery.event.handle.apply(eventHandle.elem, arguments) : undefined; 
}; 

Có cách nào tôi có thể tìm thấy lý do tại sao và ở đâu jQuery ghi đè chức năng onbeforeunload của tôi? Khi tôi cố gắng chạy jsfiddle rỗng chỉ với jQuery nạp và với chức năng onbeforeunload của tôi, nó hoạt động như mong đợi.

Mọi gợi ý sẽ được đánh giá cao. Cảm ơn trước.

EDIT:

Chỉ trong trường hợp, ai đó đề nghị sử dụng:

$(window).bind('beforeunload', function() { return 'Are you sure';}); 

Tôi đã thử nó và nó cư xử theo cùng một cách như sử dụng javascript tinh khiết.

+0

Thay vào đó, bạn có thể sử dụng phương thức 'unload' của jQuery không? http://api.jquery.com/unload/ –

+0

Tôi có thể áp dụng thành công hàm của riêng mình cho 'onbeforeunload' và tôi sử dụng jQuery 1.6. Bạn có thể cung cấp thêm thông tin hoặc mã nào không? Điều này không hoạt động trên tất cả các trình duyệt? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

Bạn đang la hét trong không gian. Cung cấp một trường hợp thử nghiệm tái tạo vấn đề này và chúng tôi có thể trợ giúp. – mekwall

Trả lời

4

Ok, cuối cùng tôi đã tìm ra một giải pháp, có lẽ không phải là giải pháp sạch nhất - bởi vì tôi không biết nguyên nhân chính xác của vấn đề - nhưng nó hoạt động. Tôi đã đặt hàm beforeunload của tôi vào hàm tải của jQuery để nó được thực thi sau khi DOM và các phần tử khác được nạp.

$(window).load(function() { 
    $(window).bind('beforeunload', function() { return 'Are you sure ?';}); 
}); 
+0

$ (cửa sổ) .bind ('beforeunload', function() {return 'Bạn có chắc chắn?';}); chỉ làm việc tốt cho tôi cảm ơn –

0

Bạn có thể có một số may mắn cố gắng một setTimeout(function(){ ... },0), tôi chạy vào cùng một vấn đề và điều này làm việc như một giải pháp khả thi.

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