2012-03-15 39 views
6

Tôi đang sử dụng trình xử lý sự kiện error của jQuery để bắt lỗi tải hình ảnh. Có vẻ như sau:Bắt lỗi tải img cho <img> thẻ được tạo sau khi tải trang (ví dụ: qua AJAX)

$(function(){ 
    $('img').error(function(){ 
    // ... do something 
    }) 
}) 

Điều này phù hợp với hình ảnh trong DOM khi trang được tải. Tuy nhiên, tôi cũng muốn nắm bắt các lỗi cho các thẻ <img> cũng được chèn qua AJAX. Tôi không muốn chạy mã nhất định sau mỗi cuộc gọi AJAX.

Tôi muốn một cái gì đó như thế này, mặc dù điều này dường như không làm việc:

$('body').on('error', 'img', function(){ 
    // ... do something 
}) 
+0

http://www.unseenrevolution.com/jquery-ajax-error-handling-function/ Có thể điều này sẽ giúp bạn. – Milap

+0

Ước gì tôi có thể tìm hiểu lý do tại sao .on không hoạt động với 'lỗi' vì tôi đã phải từ bỏ và liên tục gọi $ ('img'). –

+0

'on' không hoạt động với lỗi. Bạn không thể ủy quyền nó như sự kiện không bong bóng. – rstackhouse

Trả lời

4

Nếu bạn không muốn thiết lập các ràng buộc sau mỗi cuộc gọi ajax, bạn có thể muốn đặt nó trong ajax toàn cầu hoàn chỉnh chức năng

//Gloabal Ajax Complete 
$("body").bind("ajaxSend", function(e, xhr, settings){ 
    //Sent 
}).bind("ajaxComplete", function(e, xhr, settings){ 
    //Complete 
    $('img').error(function(){ 
     // ... do something 
    }) 
}).bind("ajaxError", function(e, xhr, settings, thrownError){ 
    //Error 
}); 
-2

bạn có thể sử dụng jQuery live() hoặc đại biểu() hoặc trên() phương pháp tùy thuộc vào phiên bản jQuery bạn đang sử dụng để đăng ký các sự kiện lỗi trên các yếu tố hình ảnh hiện tại và tương lai bạn thêm vào tài liệu. Tham khảo http://api.jquery.com/live/

+0

Như bạn có thể thấy, tôi đã thử nó và nó dường như không hoạt động. Tôi đã sử dụng 'live' và' on' ('delegate' chỉ là' on' với các đối số theo thứ tự khác) – nicholaides

+0

Sự kiện lỗi không bong bóng theo điều này: https://developer.mozilla.org/vi -US/docs/Web/Sự kiện/lỗi – rstackhouse

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