Ich glaube nicht, dass Ihre Schließung so funktioniert, wie Sie es wollen. Hast du etwas versucht wie:
%Vor%Ich muss die Abmessungen eines Bildes mithilfe eines dynamisch erstellten Bild-Tags ermitteln. Es klappt. NUR mit attr ('width') und NUR, wenn ich das Bild NICHT zum DOM hinzufüge. Andernfalls sind die zurückgegebenen Dimensionen null. Warum? :)
%Vor%Also erzeuge ich das Bild, füge es dem DOM hinzu und definiere eine Handler-Funktion, die aufgerufen wird, wenn das Bild geladen wird. Ich benutze einen Verschluss, um ihm einen Verweis auf das ursprüngliche Objekt zu geben, das innerhalb des Verschlusses "self" genannt wird. Ich speichere die URL des Bildes, um sicherzustellen, dass die Referenz in Ordnung ist. Ausgabe ist:
%Vor%Hier ist das seltsame Ding: Wenn ich die zweite Zeile oben (das appendTo) entferne, dann funktioniert es plötzlich, aber nur für attr ('width'):
%Vor%Dieses Verhalten ergibt für mich keinen Sinn. Ich würde erwarten, die tatsächliche Bildgröße in allen sechs oben genannten Fällen zu erhalten. Ich weiß jetzt, wie ich das Problem lösen kann, aber ich würde gerne verstehen, warum es passiert. Ist es ein Fehler? Oder gibt es einen logischen Grund dafür?
Die obigen Ergebnisse beziehen sich auf Safari. Ich habe gerade mit Chrome getestet und im ersten Beispiel habe ich alle korrekten Werte erhalten, aber im zweiten Beispiel immer noch zwei Nullen. Sehr seltsam.
Ich habe eine zuverlässige Lösung für Safari gefunden:
src
-Attribut !! Ich verstehe immer noch nicht, warum die Breite jemals null zurückgeben sollte, aber es scheint, dass unerwartete Dinge passieren, wenn Sie den Last-Handler erst nach dem Setzen des src anhängen. Ich habe diese Idee nur, weil ich ein weiteres Problem mit IE (die nicht einmal den Load Handler aufgerufen hat, da es das geladene Bild vor dem Anhängen des Handlers betrachtet hat), also die Lektion, die ich gelernt habe, ist immer Dinge in tun Reihenfolge wie oben beschrieben.
hat Ihren Code in Firebug und Chrome versucht und verhält sich wie erwartet:
%Vor%hat Folgendes:
%Vor% Nachdem ich die appendTo()
-Zeile entfernt habe, kann ich das Verhalten in Chrome reproduzieren, aber ich finde es nicht komisch. width()
berechnet die tatsächliche Breite für das "angezeigte" Element - z. Immer wenn Sie das Bild in ein verstecktes Div setzen, wird es == 0!
Versuchen Sie, die Zeile appendTo durch die folgenden zu ersetzen, und Sie erhalten dasselbe:
this.img.appendTo( $('<div/>').css('display', 'none') );
UPDATE:
Die Ergebnisse von Safari 3.1.2 verhalten sich für mich genauso wie Chrome, wenn sie an DOM angehängt werden.
Wenn IMG nicht in das DOM eingefügt wird, bekomme ich auch akzeptable Ergebnisse (keine Seltsamkeit):
%Vor%Ich bin überzeugt, dass es etwas Einzigartiges in Ihrem Setup geben muss ... oder es ist ein Safari @ Mac OSX-Fehler (versuchte Safari unter Windows env).
Ich habe eine zuverlässige Lösung für Safari gefunden:
Ich verstehe immer noch nicht, warum die Breite jemals null zurückgeben sollte, aber es scheint, dass unerwartete Dinge passieren, wenn Sie den Last-Handler erst nach dem Setzen des src anhängen. Ich habe diese Idee nur, weil ich ein weiteres Problem mit IE (die nicht einmal den Load Handler aufgerufen hat, da es das geladene Bild vor dem Anhängen des Handlers betrachtet hat), also die Lektion, die ich gelernt habe, ist immer Dinge in tun Reihenfolge wie oben beschrieben.
hat Ihren Code in Firebug und Chrome versucht und verhält sich wie erwartet:
%Vor%hat Folgendes:
%Vor%Nachdem ich die %code% -Zeile entfernt habe, kann ich das Verhalten in Chrome reproduzieren, aber ich finde es nicht komisch. %code% berechnet die tatsächliche Breite für das "angezeigte" Element - z. Immer wenn Sie das Bild in ein verstecktes Div setzen, wird es == 0!
Versuchen Sie, die Zeile appendTo durch die folgenden zu ersetzen, und Sie erhalten dasselbe:
%code%
UPDATE:
Die Ergebnisse von Safari 3.1.2 verhalten sich für mich genauso wie Chrome, wenn sie an DOM angehängt werden.
Wenn IMG nicht in das DOM eingefügt wird, bekomme ich auch akzeptable Ergebnisse (keine Seltsamkeit):
%Vor%Ich bin überzeugt, dass es etwas Einzigartiges in Ihrem Setup geben muss ... oder es ist ein Safari @ Mac OSX-Fehler (versuchte Safari unter Windows env).
Ich glaube nicht, dass Ihre Schließung so funktioniert, wie Sie es wollen. Hast du etwas versucht wie:
%Vor%Ich muss die Abmessungen eines Bildes mithilfe eines dynamisch erstellten Bild-Tags ermitteln. Es klappt. NUR mit attr ('width') und NUR, wenn ich das Bild NICHT zum DOM hinzufüge. Andernfalls sind die zurückgegebenen Dimensionen null. Warum? :)
%Vor%Also erzeuge ich das Bild, füge es dem DOM hinzu und definiere eine Handler-Funktion, die aufgerufen wird, wenn das Bild geladen wird. Ich benutze einen Verschluss, um ihm einen Verweis auf das ursprüngliche Objekt zu geben, das innerhalb des Verschlusses "self" genannt wird. Ich speichere die URL des Bildes, um sicherzustellen, dass die Referenz in Ordnung ist. Ausgabe ist:
%Vor%Hier ist das seltsame Ding: Wenn ich die zweite Zeile oben (das appendTo) entferne, dann funktioniert es plötzlich, aber nur für attr ('width'):
%Vor%Dieses Verhalten ergibt für mich keinen Sinn. Ich würde erwarten, die tatsächliche Bildgröße in allen sechs oben genannten Fällen zu erhalten. Ich weiß jetzt, wie ich das Problem lösen kann, aber ich würde gerne verstehen, warum es passiert. Ist es ein Fehler? Oder gibt es einen logischen Grund dafür?
Die obigen Ergebnisse beziehen sich auf Safari. Ich habe gerade mit Chrome getestet und im ersten Beispiel habe ich alle korrekten Werte erhalten, aber im zweiten Beispiel immer noch zwei Nullen. Sehr seltsam.
Mir scheint, dass die Art und Weise, wie Sie das jQuery-Objekt zuweisen und dann die load-Funktion auf dem Bild aufrufen, ein bisschen übertödlich ist, was es schwer macht zu verstehen, warum sich jQuery so verhält.
Versuchen Sie Folgendes:
%Vor%Funktioniert perfekt für mich, um es einfach zu bekommen, nachdem das Bild in das DOM injiziert wurde.
Du könntest das auch versuchen:
%Vor%Ich habe eine zuverlässige Lösung für Safari gefunden:
Ich verstehe immer noch nicht, warum die Breite jemals null zurückgeben sollte, aber es scheint, dass unerwartete Dinge passieren, wenn Sie den Last-Handler erst nach dem Setzen des src anhängen. Ich habe diese Idee nur, weil ich ein weiteres Problem mit IE (die nicht einmal den Load Handler aufgerufen hat, da es das geladene Bild vor dem Anhängen des Handlers betrachtet hat), also die Lektion, die ich gelernt habe, ist immer Dinge in tun Reihenfolge wie oben beschrieben.
hat Ihren Code in Firebug und Chrome versucht und verhält sich wie erwartet:
%Vor%hat Folgendes:
%Vor%Nachdem ich die %code% -Zeile entfernt habe, kann ich das Verhalten in Chrome reproduzieren, aber ich finde es nicht komisch. %code% berechnet die tatsächliche Breite für das "angezeigte" Element - z. Immer wenn Sie das Bild in ein verstecktes Div setzen, wird es == 0!
Versuchen Sie, die Zeile appendTo durch die folgenden zu ersetzen, und Sie erhalten dasselbe:
%code%
UPDATE:
Die Ergebnisse von Safari 3.1.2 verhalten sich für mich genauso wie Chrome, wenn sie an DOM angehängt werden.
Wenn IMG nicht in das DOM eingefügt wird, bekomme ich auch akzeptable Ergebnisse (keine Seltsamkeit):
%Vor%Ich bin überzeugt, dass es etwas Einzigartiges in Ihrem Setup geben muss ... oder es ist ein Safari @ Mac OSX-Fehler (versuchte Safari unter Windows env).
Ich glaube nicht, dass Ihre Schließung so funktioniert, wie Sie es wollen. Hast du etwas versucht wie:
%Vor%Ich muss die Abmessungen eines Bildes mithilfe eines dynamisch erstellten Bild-Tags ermitteln. Es klappt. NUR mit attr ('width') und NUR, wenn ich das Bild NICHT zum DOM hinzufüge. Andernfalls sind die zurückgegebenen Dimensionen null. Warum? :)
%Vor%Also erzeuge ich das Bild, füge es dem DOM hinzu und definiere eine Handler-Funktion, die aufgerufen wird, wenn das Bild geladen wird. Ich benutze einen Verschluss, um ihm einen Verweis auf das ursprüngliche Objekt zu geben, das innerhalb des Verschlusses "self" genannt wird. Ich speichere die URL des Bildes, um sicherzustellen, dass die Referenz in Ordnung ist. Ausgabe ist:
%Vor%Hier ist das seltsame Ding: Wenn ich die zweite Zeile oben (das appendTo) entferne, dann funktioniert es plötzlich, aber nur für attr ('width'):
%Vor%Dieses Verhalten ergibt für mich keinen Sinn. Ich würde erwarten, die tatsächliche Bildgröße in allen sechs oben genannten Fällen zu erhalten. Ich weiß jetzt, wie ich das Problem lösen kann, aber ich würde gerne verstehen, warum es passiert. Ist es ein Fehler? Oder gibt es einen logischen Grund dafür?
Die obigen Ergebnisse beziehen sich auf Safari. Ich habe gerade mit Chrome getestet und im ersten Beispiel habe ich alle korrekten Werte erhalten, aber im zweiten Beispiel immer noch zwei Nullen. Sehr seltsam.
Mir scheint, dass die Art und Weise, wie Sie das jQuery-Objekt zuweisen und dann die load-Funktion auf dem Bild aufrufen, ein bisschen übertödlich ist, was es schwer macht zu verstehen, warum sich jQuery so verhält.
Versuchen Sie Folgendes:
%Vor%Funktioniert perfekt für mich, um es einfach zu bekommen, nachdem das Bild in das DOM injiziert wurde.
Du könntest das auch versuchen:
%Vor%Tags und Links javascript jquery css image dimensions