HINWEIS: Ich schrieb dies im Jahr 2010, die Browser in der Wildnis waren IE 8/9 Beta, Firefox 3.x und Chrome 4.x. Bitte verwenden Sie dies nur für Forschungszwecke. Ich bezweifle, dass Sie dies in einen modernen Browser kopieren und ohne Probleme ausführen können.
WARNUNG: Es ist 2017 jetzt bekomme ich noch hin und wieder Punkte, bitte nur für Forschungszwecke verwenden. Ich habe derzeit keine Ahnung, wie ich den Ladezustand von Bildern erkennen kann, aber es gibt wahrscheinlich weitaus elegantere Möglichkeiten, dies zu tun ... zumindest hoffe ich ernsthaft darauf. Ich empfehle dringend, meinen Code in einer Produktionsumgebung nicht mehr zu verwenden.
Ich bin ein bisschen spät zu dieser Partei, vielleicht diese Antwort jemand anderes helfen ...
Wenn Sie jQuery verwenden mit den Aktien Event-Handler nicht stören (Onclick/Onmouseover/etc), höre eigentlich auf, sie ganz zu benutzen. Verwenden Sie die Ereignismethoden, die sie in ihrem API bereitgestellt haben.
Dies wird alarmieren, bevor das Bild an den Körper angehängt wird, weil Load-Ereignis ausgelöst wird, wenn das Bild in den Speicher geladen wird. Es macht genau das, was Sie ihm sagen: Erstellen Sie ein Bild mit dem src von test.jpg, wenn test.jpg lädt eine Warnung, dann an den Körper anhängen.
var img = $('<img src="test.jpg" />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
Dies wird alarmiert, nachdem das Bild in den Körper eingeführt wird, wieder, zu tun, was Sie ihm gesagt: ein Bild zu erstellen, ein Ereignis gesetzt (keinen src Satz, so dass es nicht geladen ist), füge das Bild an den Körper an (immer noch kein src), setze jetzt den src ... jetzt wird das Bild geladen, so dass das Ereignis ausgelöst wird.
var img = $('<img />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
$img.attr('src','test.jpg');
Sie können natürlich auch einen Fehlerhandler hinzufügen und eine Reihe von Veranstaltungen mit bind() fusionieren.
var img = $('<img />');
img.bind({
load: function() {
alert('Image loaded.');
},
error: function() {
alert('Error thrown, image didn\'t load, probably a 404.');
}
});
$('body').append(img);
img.attr('src','test.jpg');
Per Antrag von @ChrisKempen ...
ist hier eine nicht-ereignisgesteuerte Art und Weise zu bestimmen, ob die Bilder aufgebrochen werden, nachdem das DOM geladen wird. Dieser Code ist eine Ableitung von Code aus einem Artikel von StereoChrome, der mit den Attributen naturalWidth, naturalHeight und complete ermittelt, ob das Bild vorhanden ist.
$('img').each(function() {
if (this.naturalWidth === 0 || this.naturalHeight === 0 || this.complete === false) {
alert('broken image');
}
});
Ich verstehe nicht vollständig - wollen Sie eine einzige reine JS-Lösung für die Erkennung, wenn ein Bild geladen wurde, oder suchen Sie eine alternative Bibliothek zu jQuery für die Erkennung, wenn ein Bild geladen wurde? –
Ich wäre mit beiden glücklich. Ich würde jQuery nicht vernachlässigen, wie ich es anderswo verwende; Ich drücke nur meinen Verdacht aus, dass dies ein gut gelöstes Problem in einer Bibliothek ist, mit der ich nicht vertraut bin. –
Vergiss nicht, uns mitzuteilen, was du tust! –