HTML หากไม่พบรูปภาพ


101

ฉันมีรูปภาพในหน้า HTML:

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

หากไม่พบรูปภาพบนเซิร์ฟเวอร์จะแสดงสี่เหลี่ยมเปล่าที่น่าเกลียด

ฉันต้องการทำให้มันเป็นเช่นนั้นหากไม่พบรูปภาพมันจะไม่แสดงอะไรเลยหรือรูปภาพเริ่มต้นอื่น ๆ ที่ฉันรู้ว่าอยู่บนเซิร์ฟเวอร์อย่างแน่นอน

จะทำได้อย่างไร?


2
ฉันได้รับ Favicons บางไซต์ไม่มี
David19801

ในกรณีนี้อาจจะขอฝั่งเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์ก่อนเพื่อดูว่ารหัสสถานะใดกลับมา?
Pekka

ฉันพยายามที่จะไม่ใช้ js เพราะฉันไม่ชอบเว็บไซต์ที่ช้าและมี Favicons มากเกินไปที่จะทำในฝั่งเซิร์ฟเวอร์มันจะทำให้เซิร์ฟเวอร์ถูกแบน
David19801

10
ใครงี่เง่าที่บอกจาวาสคริปต์จะทำให้เว็บช้า ??
Qchmqs

@Pekka 웃แน่นอนคุณควรมีลิงค์ที่ใช้งานได้บนเว็บไซต์ จะเกิดอะไรขึ้นถ้าลิงก์ไม่ได้อยู่ในไซต์ของคุณ แต่เป็นของคนอื่น หรือจะเกิดอะไรขึ้นถ้าพวกเขามาจากที่เก็บข้อมูลระยะไกลและใช้เวลาสักครู่ในการดาวน์โหลด?
leetheguy

คำตอบ:


274

วิธีที่ดีที่สุดในการแก้ปัญหาของคุณ:

<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.src='Default.jpg'" alt="" width="100" height="120">

onerror เป็นสิ่งที่ดีสำหรับคุณ :)

แค่เปลี่ยนชื่อไฟล์ภาพแล้วลองเอง


4
เมื่อรวมกับแท็ก alt ที่มีประโยชน์นี่เป็นวิธีที่ดีในการแก้ปัญหา!
mlibby

2
ทึ่ง! โซลูชั่นที่สมบูรณ์แบบ
Emanuele Pavanello

5
ถ้า Default.jpg ไม่พร้อมใช้งานคุณจะวนซ้ำไม่รู้จบ คุณควรเพิ่มเช็คif (this.src != 'Default.jpg')
dehlen

7
เพื่อหลีกเลี่ยงการวนthis.onerror=null;ซ้ำที่ไม่มีที่สิ้นสุดและดีกว่า if: ดังที่ระบุไว้ด้านล่างโดย @Sudarshan
Guillaume F.

ใครที่ทำงานกับ react สามารถอ้างอิงได้ที่นี่stackoverflow.com/questions/34097560/…
Earlee

19

ลองดูสิ

  <object data="URL_TO_Default_img.png" type="image/png">
   <img src="your_original_image.png" />
  </object>

สิ่งนี้ได้ผลสำหรับฉัน แจ้งให้เราทราบเกี่ยวกับคุณ


5
ดูเหมือนจะใช้ได้กับเบราว์เซอร์หลัก ๆ ทั้งหมด เพียงแค่สลับค่าเริ่มต้นและต้นฉบับ ดังนั้นวัตถุนั้นจึงแสดงภาพต้นฉบับและ img เริ่มต้นหนึ่ง
Evgeny

10

โอเค แต่ฉันชอบใช้วิธีนี้ดังนั้นเมื่อใดก็ตามที่ไม่มีภาพต้นฉบับคุณสามารถโหลดภาพเริ่มต้นของคุณซึ่งอาจเป็นภาพยิ้มที่คุณชื่นชอบหรือภาพที่พูดว่าขออภัย! ไม่พร้อมใช้งาน แต่ในกรณีที่ภาพทั้งสองหายไปคุณสามารถใช้ข้อความเพื่อแสดงได้ ซึ่งคุณสามารถยิ้มได้ ดูเกือบจะครอบคลุมทุกกรณี

<img src="path_to_original_img/img.png"  alt="Sorry! Image not available at this time" 
       onError="this.onerror=null;this.src='<?=base_url()?>assets1/img/default.jpg';">

1
อย่าใช้ alt สำหรับข้อความแสดงข้อผิดพลาดหากคุณต้องการให้เครื่องมือค้นหาแยกวิเคราะห์หน้าอย่างถูกต้อง เครื่องมือค้นหาอาจจัดทำดัชนีข้อมูลเนื้อหาของคุณไม่ถูกต้อง
varela

อะไร<?=base_url()?>ทำอย่างไร ทำไมคุณถึงเพิ่มโค้ดฝั่งเซิร์ฟเวอร์และเฟรมเวิร์กที่น่าแปลกใจ?
Nico Haase

@NicoHaase url จาก php framework คุณสามารถเขียน url ของคุณเองสำหรับรูปภาพได้ตลอดเวลาฉันได้ให้ตัวอย่างที่ไม่ได้หมายความว่าคุณควรคัดลอกและวางหรือให้ความสำคัญกับ url นั้นคุณรวม url ของคุณไว้ด้วย เพื่ออธิบายว่าคุณต้องยกตัวอย่างดังนั้นฉันจึงทำ
Sudarshan Kalebere

3

ที่นี่ตรวจสอบข้อมูลโค้ดด้านล่างซึ่งในนี้ฉันสะกดชื่อภาพไม่ถูก ดังนั้นเพียงเพราะมันแสดงภาพทางเลือกเป็นภาพที่ไม่พบ (404.svg)

<img id="currentPhoto" src="https://www.ccrharrow.org/Images/content/953/741209.pg" onerror="this.src='https://www.unesale.com/ProductImages/Large/notfound.png'" alt="">


2

สำหรับทางเลือกอื่นหากไม่มีรูปภาพ - ไม่แสดงอะไรเลย (สิ่งที่ฉันกำลังมองหา)

คุณสามารถสลับฟังก์ชันจากคำตอบของ Robby Shaw ในแอตทริบิวต์ "onerror" เป็น "this.remove ()"

<img id="currentPhoto" src="SomeImage.jpg" alt='1' width="100" height="120">
<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.remove();" alt="2" width="100" height="120">


1

วิธีปกติในการจัดการสถานการณ์นี้คือการตั้งค่าaltแท็กเป็นสิ่งที่มีความหมาย

หากคุณต้องการรูปภาพเริ่มต้นแทนฉันขอแนะนำให้ใช้เทคโนโลยีฝั่งเซิร์ฟเวอร์เพื่อแสดงรูปภาพของคุณเรียกว่าใช้รูปแบบที่คล้ายกันกับ:

<img src="ImageHandler.aspx?Img=Blue.jpg" alt="I am a picture" />

ในImageHandler.aspxโค้ดให้ตรวจจับข้อผิดพลาดที่ไม่พบไฟล์และให้บริการdefault.jpgแทนคุณ


1

คุณสามารถแสดงข้อความแสดงแทนได้โดยเพิ่มalt:

<img src="my_img.png" alt="alternative text" border="0" /> 

บางทีสแควร์นี้อาจมาจาก div (หรือแท็กอื่น) ที่มี img ของคุณ
juankysmith

alt ดูเหมือนจะใช้งานไม่ได้หากรูปแบบการแสดงผล img เป็น 'บล็อก'
JohnFlux

1

ฉันเพิ่ม div พาเรนต์รอบ ๆ รูปภาพและใช้ตัวจัดการเหตุการณ์ onerror ต่อไปนี้เพื่อซ่อนรูปภาพต้นฉบับเนื่องจากใน IE ยังมีรูปภาพที่ไม่พบรูปภาพที่น่าเกลียดแสดงหลังจากใช้แอ็ตทริบิวต์ alt:

<div style=" width:300px; height:150px; float:left; margin-left:5px; margin-top:50px;">
        <img src='@Url.Content("~/Images/Logo-Left.png")' onerror="this.parentElement.innerHTML = '';" />
</div>

0

ลองใช้border=0ในimgแท็กเพื่อทำให้สี่เหลี่ยมที่น่าเกลียดหายไป

<img src="someimage.png" border="0" alt="some alternate text" />


0

ฉันต้องการซ่อนพื้นที่ที่<img>แท็กครอบครองเพื่อให้สิ่งนี้ได้ผลสำหรับฉัน

<img src = "source.jpg" alt = "" >


0

หากคุณต้องการรูปภาพอื่นแทนข้อความคุณสามารถใช้ php:

$file="smiley.gif";
$alt_file="alt.gif";
if(file_exist($file)){
     echo "<img src='".$file."' border="0" />";
}else if($alt_file){
     // the alternative file too might not exist not exist
     echo "<img src='".$alt_file."' border="0" />";
}else{
  echo "smily face";
}



-1

มันใช้งานได้สำหรับฉันว่าหากคุณไม่ต้องการใช้แอตทริบิวต์ alt หากรูปภาพแตกคุณสามารถใช้โค้ดชิ้นนี้และตั้งค่าตามนั้น

<h1>
  <a> 
   <object data="~/img/Logo.jpg" type="image/png">
     Your Custom Text Here
   </object>
  </a>
</h1>

-2

อันนี้ใช้ได้ผลสำหรับฉัน โดยใช้ srcset ฉันเพิ่งเรียนรู้เกี่ยวกับเรื่องนี้ดังนั้นฉันจึงไม่รู้ว่าเบราว์เซอร์รองรับหรือไม่ แต่มันใช้ได้ผลสำหรับฉัน ลองใช้แล้วให้ฟีดกลับมา

 <img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />

-22

วิธีแก้ไข - ฉันลบองค์ประกอบความสูงและความกว้างของ img จากนั้นข้อความแสดงแทนก็ใช้งานได้

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

ถึง

<img src="smiley.gif" alt="Smiley face" />

ขอบคุณทุกคน.


19
คุณจึงให้ "คำตอบที่ถูกต้อง" กับตัวเอง แต่คุณตอบด้วยคำตอบที่ไม่เกี่ยวข้องกับคำถาม GG WP
Jean-Paul

โอ้ผู้ชายคนนี้ยอมรับคำตอบของตัวเองจากคำตอบที่ถูกต้องทั้งหมดนี้ฮ่า ๆ ๆ วิธีที่ดีในการรักษาตัวเอง
Sudarshan Kalebere

นี่ไม่ใช่ครั้งแรก: D stackoverflow.com/a/12768098/1545917
Ghilas

คำตอบนี้ไม่ได้ให้ภาพอื่น
Patrick Knott

@ david19801 สนใจที่จะอธิบาย?
P Satish Patro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.