1

我正在尝试做一些简单的事情:我有一堆正在通过 JS 加载的图像。我将一个事件侦听器附加到加载事件,并且在加载图像之后,在侦听器函数中,我想获取调用图像并从中检索属性。这是我的代码,简化:

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

2 回答 2

0

尝试这个:

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

如果我没记错的话,当你使用 IE 时,IE 不会将事件对象作为参数传递attachEvent(),但它有一个全局event对象。

于 2012-07-17T14:54:18.500 回答
0

您需要纠正几件事。首先,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/

于 2012-07-17T14:43:22.890 回答