2013-04-17 3 views
1

어떤 이유로 인해 .load 메서드가 작동하지 않는 것 같습니다. 여기 내 JQuery와의 :동적으로로드 된 이미지 반환 outerHeight 0 (jQuery)

$(document).ready(function() { 
    var imgHeight; 
    $('body').prepend('<img src="http://farm9.staticflickr.com/8266/8653931785_4a8d43164f.jpg" class="select" />'); 
    if($('img.select').prop('complete')) { 
     imgHeight = $('img.select').outerHeight(); 
    }else{ 
     $('img.select').load(function() { 
      imgHeight = $('img.select').outerHeight(); 
     });  
    } 
    $('body').prepend('<p>Image Height: ' + imgHeight + '</p>'); 
}); 

및 예 후 jsfiddle

에 대한 링크가 몇 번을 실행 (나는 이미지가 캐시 가정) 성공적 정확한 높이를 검색합니다. 이것은 if($('img.select').prop('complete'))이 제대로 작동하고 있음을 알려줍니다.

무엇이 여기에 있습니까?

(크롬과 FF 테스트)

편집 : 좋아, 지금은 그들이로드하는 경우 하나 개 이상의 이미지를 확인하려면 어떻게? $('img.select').prop('complete')은 선택기와 일치하는 첫 번째 요소 만 테스트합니다. http://jsfiddle.net/hcarleton/2Dx5t/6/

답변

2
one()를 사용하는 대신 load()

load()이 aysnchronous입니다되지하도록 업데이트, 그래서 전에 imgHeight의 값을 설정하지 않습니다

편집$('body').prepend('<p>Image Height: ' + imgHeight + '</p>');에 전화하세요. . 또한 load() 이벤트 핸들러 함수는 jQuery 1.8에서 사용되지 않습니다.

.select 클래스가있는 이미지의 경우 위임로드 수신기를 본문에 첨부하는 것이 가장 좋습니다. 해당 이벤트 핸들러의 콜백에서 이미지 높이를 감지 할 수 있습니다.

$(document).ready(function() { 
    $('body').one('load', 'img.select', function(e) { 
     var imgHeight = $('img.select').outerHeight(); 
     $('body').prepend('<p>Image Height: ' + imgHeight + '</p>'); 
    });  

    $('body').prepend('<img src="http://farm9.staticflickr.com/8266/8653931785_4a8d43164f.jpg" class="select" />'); 
}); 
+0

감사합니다. –

+1

load()는 함수가 아닌 콜백 함수를 사용하여 이벤트를 바인딩하는 데 사용됩니다. 비동기 함수 .load()가 있지만 다른 시그널이 있습니다. –

+0

또한 jquery 1.8에서 load() 이벤트 핸들러가 더 이상 사용되지 않습니다. 내 대답을 업데이트 할게. – cfs

1

사용이 대신 :

SEE DEMO

$(document).ready(function() { 
    var imgHeight; 
    $('body').prepend('<img src="http://farm9.staticflickr.com/8266/8653931785_4a8d43164f.jpg" class="select" />'); 
    $("img").one('load', function() { 
     imgHeight = $(this).outerHeight(); 
     $('body').prepend('<p>Image Height: ' + imgHeight + '</p>'); 
    }).each(function() { 
     if (this.complete) $(this).load(); 
    }); 

}); 
+0

답변을 설명해 주시겠습니까? 복사 및 붙여 넣기가 도움이되지 않습니다. 왜 이것이 효과가 있을지에 대한 설명이 필요합니다. –

+0

가끔로드() 이벤트가 캐시 된/깨진 이미지 (이전 브라우저)에 대해 트리거되지 않거나 브라우저 동작으로 인해 여러 번 트리거되는 경우가 있습니다. 이것은 하나와 각각을 설명합니다. 초기 문제는 이벤트가 트리거 된 경우에만 호출되는 이벤트 (콜백 함수 사용)입니다. 따라서 초기 코드에서 imgHeight는 사용하려고하기 전에 정의 된 적이 없습니다. –