detachEvent не работает с именованными встроенными функциями
Сегодня я столкнулся с проблемой в IE8 (обратите внимание, что мне нужна только поддержка IE), которую я не могу объяснить: detachEvent не будет работать при использовании обработчика именованных анонимных функций.
document.getElementById('iframeid').attachEvent("onreadystatechange", function onIframeReadyStateChange() {
if (event.srcElement.readyState != "complete") { return; }
event.srcElement.detachEvent("onreadystatechange", onIframeReadyStateChange);
// code here was running every time my iframe's readyState
// changed to "complete" instead of only the first time
});
В конце концов я понял, что изменение onIframeReadyStateChange для использования arguments.callee (которого я обычно избегаю) вместо этого решило проблему:
document.getElementById('iframeid').attachEvent("onreadystatechange", function () {
if (event.srcElement.readyState != "complete") { return; }
event.srcElement.detachEvent("onreadystatechange", arguments.callee);
// code here now runs only once no matter how many times the
// iframe's readyState changes to "complete"
});
Что дает?! Разве первый фрагмент не должен работать нормально?