2014-01-07 58 views
0

我有一個jQuery加載函數來創建和添加一個使用alt標籤數據後的圖像。它適用於每個瀏覽器和IE9,只是不IE10,我不明白爲什麼。Internet Explorer 10不能讀取jQuery函數

這裏是jQuery代碼:

$("img.caption").load(function() { 
    var imageCaption = $(this).attr("alt"); 
    if (imageCaption != '') { 
     var imgWidth = $(this).width(); 
     $("<figcaption class='img-caption'><em>" + imageCaption + "</em></figcaption>").css({ "position": "relative", "bottom": 0, "left": 0, "width": imgWidth + "px" }).insertAfter(this); 
    } 
    var figcaptionHeight = $('.img-caption').outerHeight(); 
    $('.img-caption').css('margin-top', -(figcaptionHeight + 2)); 
}); 

我甚至使用其他標籤,如嘗試,但有完全沒有反應。

這是HTML標記:

<figure> 
    <img class="caption" alt="caption text" /> 
</figure> 
+1

您是否檢查錯誤控制檯? –

+0

它說「選擇器找到零個元素」,這就是讓我感到困惑的原因,因爲其他瀏覽器沒有問題,也不像它是一個複雜的選擇器。 –

+2

圖像標籤的'.src'屬性在哪裏?它不會生成帶有圖片URL的'load'事件來實際加載。 – jfriend00

回答

2

如果你正在嘗試做的是吊鉤上的負載事件在您的網頁的HTML設置的圖像,你不能可靠地做到這一點與JavaScript的。這是因爲一些圖像(尤其是瀏覽器緩存中的圖像)可能會在JS運行之前以及安裝事件處理程序之前加載,因此永遠不會通知加載事件。

在某些版本的IE中,這尤其是個問題。

你,如果你還沒有指定一個.src屬性爲您的圖像標記爲load事件的整個目的是當圖像URL完成加載通知您也不會得到​​事件。

假設你指定.src URL,有幾種可能的解決方案:

  1. onload處理程序到HTML,因爲這將是從一開始的地方。
  2. 當你的JS運行時,檢查你的所有圖像,看看是否有一些已經完成加載。您可以立即處理它們,然後將​​處理程序安裝在尚未完成加載的處理程序上。

下面是一個例子選項#2,你檢查,看看圖像是否已經加載,如果是這樣,只是處理它立即否則等待load事件:

$("img.caption").each(function() { 

    function processImage() { 
     var imageCaption = $(this).attr("alt"); 
     if (imageCaption != '') { 
      var imgWidth = $(this).width(); 
      $("<figcaption class='img-caption'><em>" + imageCaption + "</em></figcaption>").css({ "position": "relative", "bottom": 0, "left": 0, "width": imgWidth + "px" }).insertAfter(this); 
     } 
     var figcaptionHeight = $('.img-caption').outerHeight(); 
     $('.img-caption').css('margin-top', -(figcaptionHeight + 2));   
    } 

    // if image already loaded, process it now 
    if (this.complete) { 
     processImage.call(this); 
    } else { 
     // wait for it to be loaded 
     $(this).load(processImage); 
    } 
}); 
+0

謝謝!這就像一個魅力。 –

-2

IE可能不像$("img.caption")而不是嘗試$(".caption")

+0

爲什麼----不會那樣? –

+0

因爲它的Internet Explorer。 – frosty11x

+0

-1儘管我確實認爲IE可以很脆弱,但jQuery看起來會使這種薄弱狀態正常化。 'img.caption'是一個完全有效的選擇器。 jQuery選擇器背後的*** Sizzle ***引擎在主要瀏覽器(包括IE 10)中的作用相同。它最有可能對圖像的緩存問題起作用。 – War10ck