คุณรู้วิธีซ่อนไอคอน"ไม่พบรูปภาพ"แบบคลาสสิกจากหน้า HTML ที่แสดงผลเมื่อไม่พบไฟล์รูปภาพหรือไม่
วิธีการทำงานใด ๆ โดยใช้ JavaScript / jQuery / CSS?
คุณรู้วิธีซ่อนไอคอน"ไม่พบรูปภาพ"แบบคลาสสิกจากหน้า HTML ที่แสดงผลเมื่อไม่พบไฟล์รูปภาพหรือไม่
วิธีการทำงานใด ๆ โดยใช้ JavaScript / jQuery / CSS?
:-moz-broken
] ( developer.mozilla.org/en/CSS/:-moz-broken ) ฉันเพิ่งคิดกับตัวเองก่อนหน้านี้ว่าคลาสหลอกจะมีประโยชน์สำหรับการจัดแต่งทรงผมภาพที่เสีย
คำตอบ:
คุณสามารถใช้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()
หากการซ่อนรูปภาพอาจทำให้เค้าโครงเปลี่ยนไป ไซต์จำนวนมากบนเว็บใช้รูปภาพ "ไม่มีรูปภาพ" เริ่มต้นแทนโดยชี้src
แอตทริบิวต์ไปที่รูปภาพนั้นเมื่อตำแหน่งรูปภาพที่ระบุไม่พร้อมใช้งาน
$("img").error(function () { /*...*/ });
เพียงแค่ใช้ตัวเลือกแท็กเช่น
error
" boundable ด้วยหรือlive()
delegate()
visibility
จะดีกว่าเนื่องจากdisplay
สามารถทำลายเค้าโครงได้
<img onerror='this.style.display = "none"'>
ฉันได้แก้ไขโซลูชันที่แนะนำโดย Gary Willoughby เล็กน้อยเนื่องจากแสดงไอคอนรูปภาพที่เสีย วิธีแก้ปัญหาของฉัน:
<img src="..." style="display: none" onload="this.style.display=''">
ในรูปภาพโซลูชันของฉันถูกซ่อนในตอนแรกและจะแสดงเฉพาะเมื่อโหลดสำเร็จ มีข้อเสียคือผู้ใช้จะไม่เห็นภาพที่โหลดไว้ครึ่งหนึ่ง และหากผู้ใช้ปิดใช้งาน JS ก็จะไม่เห็นภาพใด ๆ
หากต้องการซ่อนทุกข้อผิดพลาดของรูปภาพเพียงเพิ่ม 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 ของขนาดของรูปภาพและการตั้งค่า background-image เป็น div นี้ หากไม่พบรูปภาพ Div จะแสดงผลแบบโปร่งใสดังนั้นทุกอย่างจึงเสร็จสิ้นโดยไม่ต้องใช้โค้ด java-script
การค้นคว้าอย่างรวดเร็วเกี่ยวกับ คำตอบของAndy Eไม่สามารถ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
กับการสร้างองค์ประกอบใหม่
error
ว่าอาจจะไม่เลวร้ายที่สุดของความคิดที่จะทำสิ่งที่คล้ายกันสำหรับ ฟังดูเหมือนnice to have
สำหรับฉัน
ฉันพบวิธีที่ดีในการทำเช่นนี้ในขณะที่ยังใช้งานได้เมื่อใช้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% 20smarest% 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;
}