Получить вызывающего события из attachEvent

Я пытаюсь сделать что-то простое: у меня есть куча изображений, которые загружаются через JS. Я присоединяю прослушиватель событий к событию load, и после загрузки Image в функции прослушивателя я хотел бы получить вызывающее Image и извлечь из него свойства. Вот мой упрощенный код:

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...
    }

2 ответа

Попробуй это:

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

Если я правильно помню, IE не передает объект события в качестве параметра, когда вы использовали attachEvent(), но у него есть глобальный event объект.

Есть пара вещей, которые нужно исправить. Во-первых, метод attachEvent не следует использовать для браузеров, отличных от IE. Вы должны структурировать свой код, чтобы проверить, реализован ли метод, и затем действовать соответственно следующим образом:

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

Другая проблема заключается в том, что при использовании attachEvent вам нужно добавить префикс "on" к имени события.

РЕДАКТИРОВАТЬ

Вы можете получить вызывающего абонента, используя следующий код в функции setBasicElement:

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

Вот рабочий пример - http://jsfiddle.net/BMsXR/3/

Другие вопросы по тегам