画像ファイルが見つからないときに、レンダリングされたHTMLページからクラシック「画像が見つかりません」アイコンを非表示にする方法を知っていますか?
JavaScript/jQuery/CSSを使用する作業方法はありますか?
JavaScriptでonerror
イベントを使用して、画像の読み込みに失敗したときに動作できます。
_var img = document.getElementById("myImg");
img.onerror = function () {
this.style.display = "none";
}
_
JQueryで(尋ねたので):
_$("#myImg").error(function () {
$(this).hide();
});
_
または、すべての画像について:
_$("img").error(function () {
$(this).hide();
// or $(this).css({visibility:"hidden"});
});
_
画像を非表示にしてレイアウトを変更する場合は、.hide()
の代わりに_visibility: hidden
_を使用する必要があります。 Web上の多くのサイトは、代わりにデフォルトの「画像なし」画像を使用し、指定された画像の場所が利用できない場合にsrc
属性をその画像に向けます。
<img onerror='this.style.display = "none"'>
Gary Willoughbyによって提案されたソリューションを少し変更しました。これは、壊れたイメージを短時間表示するためです。私の解決策:
<img src="..." style="display: none" onload="this.style.display=''">
私のソリューションでは、イメージは最初は非表示で、正常にロードされた場合にのみ表示されます。欠点があります:ユーザーは、半分読み込まれた画像を見ることができません。また、ユーザーがJSを無効にしている場合、画像は表示されません。
すべての画像エラーを非表示にするには、ページの最後(bodyタグの直前)に次のJavaScriptを追加します。
(function() {
var allimgs = document.images;
for (var i = 0; i < allimgs.length; i++) {
allimgs[i].onerror = function() {
this.style.visibility = "hidden"; // Other elements aren't affected.
}
}
})();
答えるのが少し遅れるかもしれませんが、ここに私の試みがあります。同じ問題に直面したとき、画像のサイズのdivを使用し、このdivにbackground-imageを設定することで修正しました。画像が見つからない場合、divは透明にレンダリングされるため、Javaスクリプトコードなしですべてが静かに行われます。
Andy Eの答えを簡単に調べて、live()
bind _error
することはできません。
// won't work (chrome 5)
$('img').live('error', function(){
$(this).css('visibility', 'hidden');
});
だからあなたはのように行かなければならない
$('<img/>', {
src: 'http://www.notarget.com/fake.jpg',
error: function(e){
$(this).css('visibility', 'hidden');
}
}).appendTo(document.body);
新しい要素の作成時にerror event handler
を直接バインドします。
私はこれを正確に行うための気の利いたメソッドを見つけましたが、ng-src
Angular.jsのディレクティブなど.
<img
ng-src="{{myCtrl.myImageUrlThatWillDynamicallyChange}}"
onerror="this.src='data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='"
/>
それは基本的には最短の透明なGIFです( http://proger.i-forge.net/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E% D1%82%D0%B5%D1%80/[20121112]%20The%20smallest%20transparent%20pixel.html )
もちろん、このgifはグローバル変数内に保持できるため、テンプレートが混乱することはありません。
<script>
window.fallbackGif = "..."
</script>
そして使用する
<img
ng-src="{{myCtrl.myImageUrlThatWillDynamicallyChange}}"
onerror="this.src=fallbackGif"
/>
等.
単純なCSSを使用するだけ
.AdminImageHolder {
display: inline-block;
min-width: 100px;
max-width: 100px;
min-height: 100px;
max-height: 100px;
background: url(img/100x100.png) no-repeat;
border: 1px solid #ccc;
}