我正在尝试做一些简单的事情:我有一堆正在通过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...
}
答案 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
对象。