2012-10-21 6 views
16

Utilizzare php per ottenere l'URL di 100 foto da un db e mostrarle in una pagina, ma alcune foto potrebbero non esistere più. Se l'url della foto è fallito (404) Voglio usare jquery per nascondere l'immagine e non voglio mostrare alcuna immagine di errore. Questo è il mio codice ma non funziona.jQuery per controllare l'immagine esistente se la testina 404 la nasconde

html

<div id=test> 
    <img src="http://test.com/test1.jpg" /> 
    <img src=" http://test.com/test2.jpg" /> 
    <img src="http://test.com/test3.jpg" /> 
</div> 

jquery

var pic_list = jQuery("#test img"); 

pic_list.load(function() { 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', pic_list, false); 
    http.send(); 
    if (http.status == 404) { 
     pic_list.hide(); 
    } else { 
     pic_list.show(); 
    } 
}); 

risposta

1

Il secondo parametro del metodo open è un URL, non un array di elementi HTML.

Quindi è possibile utilizzare each per iterare sugli elementi, ottenere l'attributo src utilizzando .attr() e passarlo nel metodo.

Dal momento che avete le immagini caricate già, invece di fare una nuova richiesta per ciascuno di essi, si potrebbe essere in grado di utilizzare un metodo ho discusso in un'altra domanda: Check if user is blocking 3rd party domain

Se le immagini non sono di altezza fissa/larghezza, un'immagine inesistente produrrà una piccola icona che indica che l'immagine non esiste. È possibile utilizzare la dimensione dell'immagine per vedere se l'immagine è stata caricata o meno.

+0

Ciao ~ Grazie per il tuo aiuto! – user1761824

31

L'invio di multipli richieste ajax non è necessario quando è possibile utilizzare l'evento onerror.

Controllare il relativo post jQuery/Javascript to replace broken images.

adattamento che alle vostre esigenze:

HTML:

<img src="someimage.png" onerror="imgError(this);" /> 

JS:

function imgError(image){ 
    image.style.display = 'none'; 
} 

Fiddle

oppure con jQuery:

function imgError(image){ 
    $(image).hide(); 
} 

normalmente non userei linea JS nel codice HTML, e persino pensato di utilizzare un gestore .error:

$('#test img').error(function() { 
    $(this).hide(); 
}); 

Ma quanto sopra non funziona se il gestore è allegando eseguito dopo che l'evento di errore è stato attivato, quindi suggerisco la prima soluzione.

+0

Soluzione molto migliore. Mi ero completamente dimenticato di onerror, è perfetto per questo. +1 – sachleen

+0

Grazie. '=]' Sto cercando di trovare una soluzione di gestione '.error' completamente discreta aggiungendo un'iterazione' .each' e controllando se le immagini hanno già generato l'evento error, ma non sono riuscito a trovare alcun flag 'hasError' o ancora così, mhm. –

+0

Ciao ~ Grazie per il tuo aiuto! Io uso il tuo non invadente.soluzione di gestione degli errori che può nascondere l'inesistente, ma non ha alcun effetto su alcuni siti web di upload di immagini gratuiti come Photobucket o Imageshack perché questi siti mostreranno un'immagine di errore speciale quando la foto viene rimossa o cancellata. jQuery non fraintenderà la foto è ancora esistente e mostra l'immagine di errore. Inoltre le foto includono dimensioni diverse, quindi non posso usare jQuery per giudicarle se la foto esiste per dimensioni specifiche come ----> se width! = 200 quindi nasconderla – user1761824

Problemi correlati