我有类似下面的代码:
for(var i=0;i<4;i++) {
frm = document.createElement("iframe");
frm.width = "100";
frm.height = "100";
frm.src = "source.php";
frm.id = "something";
frm.attachEvent("load", function() { alert(this.id); //Here I need alternative for this.id });
var frameDiv = document.getElementById("frameDiv");
frameDiv.appendChild(frm);
}
它已经简化了,但基本上它在一些div中创建了四个iframe,我需要根据每个帧的id来激活一些动作,当它完全加载时。它运作良好,但问题出在IE中。 IE不知道运营商这个,所以我无法访问内部框架的id。我有什么办法可以用于IE吗?
感谢您的帮助!
Abhijit:实际上,整个代码是这样的:
if(frm.addEventListener) {
frm.addEventListener("load", function() { alert(this.id); },false);
}
else if(frm.attachEvent) {
frm.attachEvent("onload", function() { alert(this.id); });
}
else {
frm.onload=function() { alert(this.id); };
}
所以它应该适用于所有浏览器。
答案 0 :(得分:2)
我不确定为什么这在IE中不起作用,而是在改变
frm.attachEvent("load", function() { alert(this.id); });
到
// wrap in an anonymous function to fix scope issues
(function(frm) {
frm.attachEvent("load", function() { alert(frm.id); });
})(frm);
应该为您提供iframe的一致引用。
(编辑:更新了上面的代码以修复循环中的范围问题。这正是您通常应该避免在这样的循环中创建闭包的原因 - 所有frm
引用都将指向最后定义的iframe,除非你采取明确的措施来修复范围。)
答案 1 :(得分:1)
frm.attachEvent("load", function() { alert(this.id); });
,这应该是frm.attachEvent("onload", function() { alert(this.id); });
。在IE中,您可以将元素作为event.srcElement。所以您的代码可能是frm.attachEvent("onload", function(event) { alert(event.srcElement.id); });