Альтернатива Javascript для этого (IE) - PullRequest
0 голосов
/ 02 июля 2011

У меня есть что-то вроде следующего кода:

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);
}

Это упрощено, но в основном это создает четыре iframes внутри некоторого div, и мне нужно запустить некоторые действия, основанные на id каждого кадра, когда он полностью загружен. Работает хорошо, но проблема в IE. IE не знает оператора этого, поэтому я не могу получить доступ к идентификатору кадра внутри. Есть ли альтернатива, которую я могу использовать для IE?

Спасибо за любую помощь!


Абхиджит: На самом деле весь код выглядит так:

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); };
}

Так что должно работать во всех браузерах.

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Я не уверен, почему это не сработает в 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 голос
/ 02 июля 2011

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); });

...