2012-04-12 27 views
12

Vì vậy, tôi có đoạn mã này lặp qua một mảng và tải hình ảnh và thông báo khi hình ảnh được tải.Khẳng định sự kiện tải ảnh Javascript

for (var i = 0; i < arr.length; i++) {     
    var imageObj = new Image(); 
    imageObj.src = url[i]; 
    imageObj.onload= (function(i){ 
       return function(){ 
        console.log(i, 'loaded'); 
       } 
      })(i); 

} 

Nó hoạt động tốt. Tuy nhiên, nếu tôi cố gắng làm điều này, nó sẽ không hoạt động

imageObj.addEventListener('onload', function(
    console.log(i, 'loaded'); 
}, false); 

Sự cố là gì? Và có cách nào để tôi tránh sử dụng đóng cửa trong trường hợp này?

+0

Không phải vấn đề duy nhất, nhưng ví dụ bị hỏng thứ hai của bạn rõ ràng bị hỏng JS, thiếu 'i) {' ở cuối dòng đầu tiên. – Lambart

+0

Chỉ để được ở bên an toàn, trước tiên bạn không nên chỉ định sự kiện và sau đó gán src? – bashan

Trả lời

21

Một phần của sự cố: Sự kiện không được gọi là onload, nhưng load.

imageObj.addEventListener('load', function() { /* ... */ }, false); 

Khác hơn, kể từ i thay đổi bên ngoài chức năng trình xử lý sự kiện, bạn cần đóng.

+1

@gillesc Một mảng ES5 bình thường.forEach() sẽ cung cấp cho bạn một phạm vi mới, vì vậy các ràng buộc của bạn không phải lúc nào cũng được đặt trên mục cuối cùng. Nó sẽ ít mã hơn lặp lại thông qua các chỉ mục và thêm đóng của riêng bạn quá. – mikemaccana

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