2011-07-05 4 views
1

자바 스크립트 Image 객체에 이미지를로드 할 때 이미지 i에 대해 load 이벤트가 트리거되면 i.completetrue이어야한다고 가정합니다. 그것은 jQuery/JavaScript 코드에서 버그가 발생했거나 (더 많은 가능성이 있음) 의심 스럽습니다.이미지 로딩 : JavaScript onLoad 및 Image :: complete (FireFox 3)

코드 (스트립 방식으로 내려 갔지만 관련된 내용이 여기에 있음을 확신합니다.)

$img = $('<img />'); // This line added by edit for clarification 
var eventData = { 
     sheet: this, 
     resolution: resolution, 
     i: i, 
    }; 

$img.bind('load', eventData, onTileLoad); 
$img.attr('src', tile.src); 

onTileLoad = function(ev) { 
    var sheet = ev.data.sheet; 
    var resolution = ev.data.resolution; 
    var i = ev.data.i; 

    if (!this.complete) { 
     console.log('Image load not complete: sheet ' + sheet.sheetName + 
       ', resolution ' + resolution + ' tile ' + i) 
    }; 

    .... 
}; 

이 콘솔 로그는 내 이미지 중 일부는 아니지만 대부분은 트리거합니다. 나는 그것이 결코 촉발되어서는 안된다고 생각할 것이다. 가치가있는 것을 위해 FireFox 3.6.18 (매우 안정적이고 좋은 개발자 도구가 있기 때문에)에서 일하고 있습니다.

아무도 무슨 일이 벌어지고 있을지 알아?

답변

0

$img은 무엇입니까?

onTileLoad 함수에서 this$img을 나타냅니다. $img이 jQuery 객체 (보이는 것처럼) 인 경우 complete 속성이 없습니다. complete 속성은 DOM 개체에만 설정됩니다.

이 부분을보세요. test case. 이 도움이 될 것입니다

희망,

건배보다 먼저이`var에 $ IMG = $ ('')의

+0

죄송합니다,; '. 그에 따라 편집되었습니다. –

+0

하지만'onTileLoad'에서'this'는'$ img'가 아니며 JavaScript 이미지 객체가 될 것입니다. 이것이 이벤트 처리기에서'this'가 작동하는 방식입니다. jQuery 객체를 원한다면, 사용자'$ (this)'를 가져야한다. 그래서'complete'는 올바른 객체에 설정되어야합니다. 실제로 대부분의 경우입니다 : 위에서 말했듯이 "이 콘솔 로그는 내 이미지 중 일부는 아니지만 대부분을 유발합니다." –

+0

예 .. 당신 말이 맞아요, 내가 말한 것을 잊어 버려라. ^^ 나는 여전히 문제가 어디에 있는지 = 검색한다.) – pomeh