158 votes

comment afficher une autre image si l'image source n'est pas trouvée ? (onerror fonctionne dans IE mais pas dans mozilla)

J'ai besoin d'afficher une autre image dans une cellule du tableau si l'image source n'est pas trouvée. Actuellement, le code ci-dessous est utilisé pour le faire.

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; 
}

Le problème est que la solution ci-dessus fonctionne dans Internet Explorer mais pas dans Mozilla.

Veuillez m'indiquer une solution qui fonctionne dans tous les navigateurs.

0 votes

Mettez le code en retrait de 4 espaces. En outre, si le code ci-dessus est ce que vous avez, vous avez une erreur avec un guillemet double manquant à la fin de innerHTML.

0 votes

J'ai oublié de mettre le guillemet à la fin ici. La solution donnée dans #3938383, il y a un lien mentionné là-bas dans la réponse qui ne fonctionne pas.

0 votes

Autre astuce : lorsque vous répondez à quelqu'un, commencez le commentaire par @ suivi de son nom, et il recevra un message lui indiquant que vous lui avez répondu.

440voto

Etdashou Points 1007

Je pense que c'est très bien et court

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

Mais, faites attention. Le navigateur de l'utilisateur sera bloqué dans une boucle sans fin si l'image onerror génère elle-même une erreur.


EDIT Pour éviter une boucle sans fin, supprimez le onerror d'en sortir immédiatement.

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

En appelant this.onerror=null il supprimera le onerror puis essaiera d'obtenir l'image alternative.


NOUVEAU Je voudrais ajouter un moyen jQuery, si cela peut aider quelqu'un.

<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' />

Il vous suffit d'ajouter class='backup_picture' à toute balise img pour laquelle vous souhaitez qu'une image de sauvegarde soit chargée si elle tente d'afficher une mauvaise image.

9 votes

@Etashou - Chrome ne déclenche que la fonction onerror une fois, contrairement à tous les autres navigateurs.

0 votes

Ne fonctionne pas dans mozilla, j'obtiens une erreur de mauvaise syntaxe sur this.src

0 votes

Ne fonctionne pas dans Firefox et autres navigateurs, Que faire pour les autres

4voto

Jyoti Points 233

J'ai obtenu la solution à ma question :

J'ai fait quelque chose comme ça :

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; 
    } 

De cette façon, il fonctionne dans tous les navigateurs.

3voto

Steve Points 10623

Si vous êtes ouvert à une solution 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>

////EDIT OK, voici une version 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 votes

Merci pour la réponse. Mais j'ai besoin de faire cela uniquement par javascript. Veuillez me dire s'il existe une solution pour cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X