Получить вызывающего события из 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/