从attachEvent获取事件的调用者

时间:2012-07-17 14:30:54

标签: javascript 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 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

试试这个:

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

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