noname02
load 이벤트에 대한 콜백 메서드 본문
1 2 3 4 | $('select').on(load, function() { console.log('#1'); }); console.log('#2'); | cs |
이 경우 #2가 먼저 로그가 찍히고, 그 다음 #1이 로그가 찍힌다. 당연한 내용.
그래서 이런 코드가 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $('#content > img').click( function() { var $this = $(this); var title = $this.attr('title'); $desc.html(title).show(); $loading.show(); $('<img>').on('load', function() { var $img = $(this); $loading.hide(); $('#panel').animate({ 'height': '100%' }, 500); $img.attr('src', $this.attr('src')); resize($img); $('#wrapper').append($img); $img.fadeIn(1000); console.log('실행1'); }); console.log('실행2'); } ); | cs |
이 경우, 실행1은 영원히 실행되지 않는다.
이는 15번 라인 때문인데, $('<img>')로 생성된 이미지 엘리먼트에 src값이 없어서 이미지가 로드가 되지 않기 때문에 load의 콜백이 이루어지지 않기 때문이다.
그래서 src값을 설정하는 15번 라인을 $('<img>')에 붙여줘서 이미지 로드를 완료 시키고 콜백이 이루어지도록 해야 한다.
즉 다음과 같이 수정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $('#content > img').click( function() { var $this = $(this); var title = $this.attr('title'); $desc.html(title).show(); $loading.show(); $('<img>').on('load', function() { var $img = $(this); $loading.hide(); $('#panel').animate({ 'height': '100%' }, 500); resize($img); $('#wrapper').append($img); $img.fadeIn(1000); console.log('실행1'); }).attr('src', $this.attr('alt')); console.log('실행2'); } ); | cs |
19번 라인을 주목해야한다.
'Web > jQuery' 카테고리의 다른 글
Deferred Object (0) | 2016.02.01 |
---|---|
나중에 생성된 엘리먼트에도 이벤트 연결하기 (0) | 2016.01.25 |
선택된 요소에 대한 hover만을 처리할 때 (0) | 2016.01.07 |
hover 유지시키기 (0) | 2015.11.25 |
.animate 되는 시간을 점차 늘리기 (0) | 2015.11.25 |
Comments