web-dev-qa-db-ja.com

ソース画像が見つからない場合に代替画像を表示する方法は? (IEで動作するが、Mozillaでは動作しないエラー)

ソース画像が見つからない場合、テーブルのセルに代替画像を表示する必要があります。現在、そのために以下のコードが使用されています。

cell.innerHTML="<img height=40 width=40 src='<%=request.getContextPath()%>/writeImage.htm' onError='ImgErrorVideo(this);'>" 
function ImgErrorVideo(source){
        source.src = "video.png";
        source.onerror = ""; 
        return true; 
}

問題は、上記のソリューションがInternet Explorerで機能しているが、Mozillaでは機能していないことです。

すべてのブラウザで動作するソリューションを教えてください。

109
Jyoti

これはとても素敵で短いと思います

<img src="imagenotfound.gif" alt="Image not found" onerror="this.src='imagefound.gif';" />

しかし、注意してください。 onerrorイメージ自体がエラーを生成すると、ユーザーのブラウザーは無限ループに陥ります。


EDIT無限ループを回避するには、onerrorを一度に削除します。

<img src="imagenotfound.gif" alt="Image not found" onerror="this.onerror=null;this.src='imagefound.gif';" />

this.onerror=nullを呼び出すと、onerrorが削除され、代替画像の取得が試行されます。


NEW jQueryの方法を追加したいのですが、これが誰にも役立つ場合は。

<script>
$(document).ready(function()
{
    $(".backup_picture").on("error", function(){
        $(this).attr('src', './images/nopicture.png');
    });
});
</script>

<img class='backup_picture' src='./images/nonexistent_image_file.png' />

悪い画像を表示しようとする場合に、バックアップ画像に読み込むimgタグにclass = 'backup_picture'を追加するだけです。

346
Etdashou

私のクエリの解決策があります:

私はこのようなことをしました:

cell.innerHTML="<img height=40 width=40 alt='' src='<%=request.getContextPath()%>/writeImage.htm?' onerror='onImgError(this);' onLoad='setDefaultImage(this);'>"

function setDefaultImage(source){
        var badImg = new Image();
        badImg.src = "video.png";
        var cpyImg = new Image();
        cpyImg.src = source.src;

        if(!cpyImg.width)
        {
            source.src = badImg.src;
        }

    }


    function onImgError(source){
        source.src = "video.png";
        source.onerror = ""; 
        return true; 
    } 

これにより、すべてのブラウザで機能します。

よろしくお願いします

2
Jyoti

PHPソリューションを開いている場合:

<td><img src='<?PHP
  $path1 = "path/to/your/image.jpg";
  $path2 = "alternate/path/to/another/image.jpg";

  echo file_exists($path1) ? $path1 : $path2; 
  ?>' alt='' />
</td>

////編集OK、これはJSバージョンです:

<table><tr>
<td><img src='' id='myImage' /></td>
</tr></table>

<script type='text/javascript'>
  document.getElementById('myImage').src = "newImage.png";

  document.getElementById('myImage').onload = function() { 
    alert("done"); 
  }

  document.getElementById('myImage').onerror = function() { 
    alert("Inserting alternate");
    document.getElementById('myImage').src = "alternate.png"; 
  }
</script>
1
Ben