2011-03-02 47 views
0

我有這個瘋狂的JavaScript問題與IE7和IE8。下面的函數表達式加載一些圖像。而已。非常簡單。當函數被直接調用,即testmypatience()它會像它應該那樣工作,但如果我從超時內調用它,它將不會加載圖像。該函數被調用,但圖像不會加載。當由jQuery animate回調調用時,它也無法工作。功能不工作,因爲它應該在IE7和IE8從setTimeout調用

我試過了一切,我無法得到它的工作,所以你的幫助將是最感激。

var testmypatience = function($active){ 
       var arr = ['images/site/products-medium/m_cordial_pomegranateelderflower.png', 'images/site/products-medium/m_cordial_spicedberry.png', 'images/site/products-medium/m_cordial_strawberryelderflower.png', 'images/site/products-medium/m_750presse_coxsapple.png', 'images/site/products-medium/m_party_appleandelderflower.png', 'images/site/products-medium/m_squeezy_blackcurrentandapple.png', 'images/site/products-medium/m_270presse_cranberryandorange.png', 'images/site/products-medium/m_270presse_elderflower.png', 'images/site/products-medium/m_270presse_gingerlemongrass.png']; 
       for (i = 0; i < arr.length; i++) { 
        var img, len; 
        img = new Image(); 
        img.src = arr[i]; 

        img.onload = function(){ 
         console.log('done ' + this.src); 
        } 
       } 
      } 

//this works 
testmypatience() 

//None of these work 
    setTimeout(function(){ 
     testmypatience() 
    }, 400) 

    setTimeout(testmypatience, 400) 

    jQuery('elm').animate({left:'1000px'}, 
    { 
     duration:200, 
     complete: testmypatience 
    }); 
+0

我只是想補充一點,當我說「沒有這些工作,」上面我的意思是他們做調用函數但IE7和IE8不會觸發onload事件,也不會加載圖像。 – screenm0nkey 2011-03-02 11:41:48

+2

也許你必須把1000px放在''''內。如果需要,請在Chrome中運行。 – pimvdb 2011-03-02 11:42:16

+0

@pimvdb - 這只是一個例子。我只是表明它是從Jquery方法中調用的。從回調中調用它不起作用的地步。我會從代碼中刪除這一點,因爲它很明顯造成混亂 – screenm0nkey 2011-03-02 11:57:11

回答

2

您不需要像解決方案中那樣複雜。只需交換srconload

錯誤:

img = new Image(); 
img.src = arr[i]; 
img.onload = function(){ ... } 

右:

img = new Image(); 
img.onload = function(){ ... } 
img.src = arr[i]; 
+0

謝謝你。這是正確的答案。不完全確定爲什麼用戶會在+1上寫下gonchuki的帖子,因爲它與我的問題有關是不正確的,儘管我很欣賞他的回覆,因爲我會花時間回覆我的問題。 Stackoverflow是堅果。 – screenm0nkey 2011-03-24 11:48:04

+0

+1 - 只需再次引用您的答案。再次感謝你;) – screenm0nkey 2011-07-14 10:43:41

2

除非您爲此安裝了瀏覽器擴展/插件,否則IE7和8沒有控制檯。註釋與console.log電話線或使用類似FireBug Lite

另外,作爲pimvdb稱,1000px應在報價(不帶引號它打破了所有的瀏覽器,它是無效的JavaScript語法)。

+0

IE9已經構建了一個日誌控制檯,它還允許您選擇瀏覽器模式,以便您可以在ie7和8中看到輸出。它不是關於日誌記錄。我所做的一點是,當從超時調用函數時,永遠不會調用加載方法。 – screenm0nkey 2011-03-02 11:56:46

0

我已經整理了它。我必須先將一個空的圖像對象插入到dom中,然後給它一個src屬性,然後才能在IE7和8中觸發onload事件。如果我有點含糊,請隨時提出任何問題,而且我將回答你所有的問題。

$(function(){ 
       var testmypatience = function($active){ 
        var arr = ['images/site/products-medium/m_cordial_pomegranateelderflower.png', 'images/site/products-medium/m_cordial_spicedberry.png', 'images/site/products-medium/m_cordial_strawberryelderflower.png', 'images/site/products-medium/m_750presse_coxsapple.png', 'images/site/products-medium/m_party_appleandelderflower.png', 'images/site/products-medium/m_squeezy_blackcurrentandapple.png', 'images/site/products-medium/m_270presse_cranberryandorange.png', 'images/site/products-medium/m_270presse_elderflower.png', 'images/site/products-medium/m_270presse_gingerlemongrass.png']; 
        for (i = 0; i < arr.length; i++) { 
         var img, len; 
         img = new Image(); 
         $(img).prependTo('body'); 

         img.onload = function(){ 
          console.log('done ' + this.src); 
         } 
        } 

        $('img').each(function(i, elm){ 
         elm.src = arr[i]; 
        }) 
       } 

       setTimeout(function(){ 
        testmypatience() 
       }, 400) 
      })