7 ответов:
можно использовать
onerrorсобытие в JavaScript, чтобы действовать, когда изображение не загружается: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"}); });вы должны использовать
visibility: hiddenвместо.hide()если скрытие изображений может изменить макет. Многие сайты в интернете используют изображение по умолчанию "no image" вместо этого, указываяsrcатрибут к этому изображению, когда указанное местоположение изображения недоступно.
делаем быстрое исследование на Энди Е ответ, его невозможно
live()связать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при создании нового элемента.
Это может быть немного поздно для ответа, но вот моя попытка. Когда я столкнулся с той же проблемой, я исправил ее с помощью div размера изображения и настройки фонового изображения для этого div. Если изображение не найдено, div визуализируется прозрачным, поэтому все это делается молча без кода java-скрипта.
чтобы скрыть каждую ошибку изображения, просто добавьте этот JavaScript в нижней части страницы (непосредственно перед закрытием тега body):
(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. } } })();
Я немного изменил решение, предложенное Гэри Уиллоуби, потому что он кратко показывает сломанное изображение. Мое решение:
<img src="..." style="display: none" onload="this.style.display=''">в моем решении изображение скрыто изначально и отображается только тогда, когда оно успешно загружено. Он имеет недостаток: пользователи не будут видеть наполовину загруженные изображения. И если пользователь отключил JS, то он никогда не увидит никаких изображений
Я нашел отличный метод, чтобы сделать именно это, будучи все еще функциональным при использовании
ng-srcуказание на угловой.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" />etc.
Comments