2013-09-11 3 views
1

Я искал различные сайты и не могу понять, где я ошибся. Это работает в основных браузерах, но не в IE7 или IE8. Моя проблема в том, что источник события имеет значение null после загрузки изображения. Вы увидите, что распечатано на странице (у меня есть div, где я отправляю некоторый текст). Вот мой код:Другой вопрос загрузки изображения IE8

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<script type="text/javascript"> 
    var panorama = new Object(); 
    var mainContainer; 
    var panoHolder; 
    var panoCanvas; 
    //once document is loaded starts website 
    AttachEvent(window, 'load', eventWindowLoaded); 

    // logic to attach the event correctly in IE 
    function AttachEvent(element, type, handler) { 
     if (element.addEventListener) { 
      element.addEventListener(type, handler, false); 
     }else if (element.attachEvent) { 
      element.attachEvent('on' + type, handler) 
     } else { 
      element['on' + type] = handler; 
     } 
    } 

    function eventWindowLoaded() { 
     panorama.totalpanels = 6; 
     panorama.sourceLocation = "my_files/images/"; 
     panorama.width = 3200; 
     panorama.height = 964; 
     panorama.thumbnails = new Object(); 
     panorama.thumbnails.images = new Array(panorama.totalpanels); 
     panorama.thumbnails.imageWidths = new Array(); 
     panorama.thumbnails.imageHeight = 0; 

     //sets attributes of container objects 
     mainContainer = document.createElement("div"); 
     mainContainer.id = "container"; 
     mainContainer.style.width = "1010px"; 
     mainContainer.style.height = panorama.height + "px"; 

     obj("mainelement").appendChild(mainContainer); 

     panoHolder = document.createElement("div"); 
     panoHolder.id = "animationholder"; 
     panoHolder.style.width = panorama.width + "px"; 
     panoHolder.style.height = panorama.height + "px"; 
     panoHolder.style.left = '0px'; 
     panoHolder.style.top = "0px"; 
     mainContainer.appendChild(panoHolder); 

     panoCanvas = document.createElement("div"); 
     panoCanvas.id = "room"; 
     panoCanvas.width = panorama.width; 
     panoCanvas.height = panorama.height; 
     panoHolder.appendChild(panoCanvas); 

     for(var i = 1; i <= panorama.totalpanels; i++) { 
      panorama.thumbnails.images[i - 1] = new Image(); 
      AttachEvent(panorama.thumbnails.images[i - 1], 'load'preloadThumbnails); 
      panorama.thumbnails.images[i - 1].src = panorama.sourceLocation + "TC_tile_thumb" + i + ".jpg"; 
      panorama.thumbnails.images[i - 1].id = i - 1; 
     } 
    } 

    function preloadThumbnails(e) { 
     panorama.thumbnails.loaded++; 
     //adds width and height attributes to panorama.thumbnails.imageWidths array 
     try { 
      panorama.thumbnails.imageWidths.push(e.currentTarget ? e.currentTarget.width : window.event.srcElement.width); 
      panorama.thumbnails.imageHeight = e.currentTarget.height; 
      panoCanvas.appendChild(e.currentTarget); 
     } 
     catch (ee) { 
      var targ; 
      if (!e) var e = window.event; 
      if (e.currentTarget) targ = e.currentTarget; 
      else if (e.srcElement) targ = e.srcElement; 
      t('<br /> error: ' + ee + '<br /> event: ' + e + '<br /> target: ' + targ + '<br />' + e[0], true); 
     } 

     if (panorama.thumbnails.loaded >= panorama.totalpanels) { 
      e.currentTarget.removeEventListener('load', preloadThumbnails , false); 
      startFullRezPreload(); 
     } 
    } 
    //returns an object reference 
    function obj(element) { 
     return document.getElementById(element); 
    } 

    function t(message, addTo) { 
     if (addTo) { 
      obj("test").innerHTML += message; 
     } 
     else { 
      obj("test").innerHTML = message; 
     } 
    } 
</script> 
</head> 

<body id="mainelement"> 
<div id="test">Test</div> 
</body> 
</html> 

ответ

0

Internet Explorer (старые версии) не передавал объект события в качестве параметра. Вместо этого он хранится в глобальном (оконном) свойстве, называемом «событие».

Традиционный подход должен был сделать что-то вроде этого в верхней части обработчика событий:

function preloadThumbnails(e) { 
     e = e || window.event; 
+0

я переехал эту линию от моего улова, чтобы быть первой линии: если вар е = окно (е!) .мероприятие; я все еще получаю это когда я прослеживать, хотя: ошибку: TypeError: Невозможно получить свойство «ширину» неопределенной или нулевой ссылки событие: [объект Event] цель: не определено –

+0

Не переобъявить «е» с 'var' там. Объекты «события» Internet Explorer отличаются от объектов в других браузерах; [Подробнее см. документацию MSDN.] (http://msdn.microsoft.com/en-us/library/ms535863.aspx) В частности, это не «целевая», это «srcElement». – Pointy

+0

Да, я перекодировал первую часть функции с теми же результатами (targ == null): 'function preloadThumbnails (e) { \t \t e = e || window.event; \t \t var targ; \t \t if (e.currentTarget) targ = e.currentTarget; \t \t else if (e.srcElement) targ = e.srcElement; ' –

Смежные вопросы