0

forループを使用して、一連のサムネイルをユーザーに表示しています。ロードに失敗した場合は、代わりthumbnails[i].pathにロードthumbnail_unavailable.jpgしたいと思います。

私が理解しているように、jQueryの.error()ハンデラーは次のように使用する必要があります。

for (var i=0; i<thumbnails.length; i++){
   var txt = "";
   txt += "<div class...>";

       // if no image, load "Screenshot Unavailable" thumbnail
       var temp_img = $('<img id="'+thumbnails[i].video_id+'" />');
       temp_img.error(function () {      
          // temp_img.attr doesn't work
          temp_img.attr('src','images/thumbnail_unavailable.jpg');
          // nor does: $('#'+thumbnails[i].video_id).attr('src','...jpg');
          // nor does: $(this).attr('src','...jpg');
       }).attr('src', thumbnails[i].path);

    txt += temp_img.get(0).outerHTML;                                
    txt += "</div>";

   $('#putVidThumbsHere').append(txt);
}

ただし、サムネイルは、thumbnail[i].path使用する$(this) $('#'...かどうかに関係なく、壊れたままになります。temp_img

4

1 に答える 1

0

失敗したリソースを処理するためのon/バインディングを含むすべてを試しました。oneどういうわけか(そしてその理由についての説明が欲しいのですが)、そのforループで行われた参照は、画像へのURLが実際に失敗したことを確認するために必要な遅延時間とうまく混ざりませんでした。

私はついに別のSOスレッドでこの素晴らしい解決策を見つけました:

function ImgError(source){
    source.src = "/images/noimage.gif";
    source.onerror = "";
    return true;
}

<img src="someimage.png" onerror="ImgError(this);"/>
于 2012-06-25T15:26:12.737 に答える