2012-07-17 3 views
1

간단한 작업을 수행하려고합니다. JS를 통해로드되는 이미지 묶음이 있습니다. load 이벤트에 이벤트 리스너를 첨부하고 이미지가로드 된 후 리스너 함수에서 호출하는 Image를 가져 와서 속성을 검색하고 싶습니다. 여기에 간단하게 내 코드입니다 : 당신이 해결해야 할 몇 가지가 있습니다attachEvent에서 호출자 가져 오기

function loadImages() { 
    for (var i = 0; i < arrDownloadQueueBasic.length; i++) { 
       var path = arrDownloadQueueBasic[i].path; 

       var img = new Image(); 
       img.type = arrDownloadQueueBasic[i].type; 
       img.attachEvent(img, 'load', setBasicElement); 
       img.src = path; 
      } 
    } 

function setBasicElement(e) { 
     var caller = e.target || e.srcElement; 
     alert(caller); // THIS DOESNT WORK - RETURN NULL 
     alert(caller.type) // OF COURSE THIS DOESNT WORK AS WELL... 
    } 

답변

0

은. 첫째, attachEvent 메소드는 IE가 아닌 다른 브라우저에 사용되어서는 안됩니다. 당신은 방법이 구현되어 있는지 확인하도록 코드의 구조를 다음과 같이 따라 행동해야합니다

if(img.addEventListener) { 
    img.addEventListener('load', setBasicElement, false); 
} 
else if(img.attachEvent) { 
    img.attachEvent('onload', setBasicElement); 
} 
else { 
    img.onload = setBasicElement; 
} 

다른 문제는 attachEvent를 사용할 때 "에"로 이벤트 이름을 접두사 필요가있다.

편집

당신은 setBasicElement 기능에 다음 코드를 사용하여 발신자 얻을 수

:

여기
var caller = e.target || e.srcElement || window.event.target || window.event.srcElement; 

가 작동 예입니다 - http://jsfiddle.net/BMsXR/3/

+0

감사합니다. 실제로 그 모든 작업을 수행하고 있습니다.이 코드를 작성하는 동안이 코드를 간소화하여 "on"이라고 쓰는 것을 잊었습니다. 어쨌든 내 질문은 남아 ... – Light

+0

이 브라우저에서 작동합니까? – tjscience

0

이 시도 :

var caller = window.event ? window.event.srcElement : e.target; 

내가 기억한다면 IE가 attachEvent()을 사용할 때 이벤트 객체를 매개 변수로 전달하지 않지만 전역 객체는 event입니다.

+0

'||'대신 ':' ? 어쨌든 이것은 IE에서도 null을 반환합니다 ... – Light

+0

죄송합니다, 예, ':'로되어 있어야합니다. – nnnnnn

+0

IE에서 여전히 null을 반환합니다. – Light

관련 문제