2009-11-16 11 views
12

$('img').height() gibt 0 in Chrom zurück, aber es gibt die tatsächliche Höhe in IE und Firefox zurück.Bildhöhe mit jquery in Chrom Problem

Was ist die tatsächliche Methode, um die Höhe des Bildes in Chrom zu erhalten?

+0

Haben Sie 'height' entweder im' img' -Tag selbst oder im CSS? –

+0

ist der img sichtbar, dh angezeigt worden? –

+6

Do not stuff nicht auf $ (document) .ready, sondern auf '$ (window) .load'. Arbeitete für mich - http://www.fortwaynewebdevelopment.com/jquery-width-or-height-always-returns-0-fix/ – jibiel

Antwort

1

Meine Annahme ist, dass diese Funktion aufgerufen wird, bevor das Bild fertig geladen ist. Können Sie versuchen, die Funktion zu verzögern, um festzustellen, ob dies tatsächlich der Fall ist? Wenn dies der Fall ist, können Sie mit einem Timer schummeln, bevor Sie die Funktion ausführen.

Es ist etwas komplizierter festzustellen, wenn ein Bild geladen wurde. Have a look at this script for some ideas - vielleicht würde es für dich arbeiten.

+0

Oder führen Sie das Skript in einem Body-Onload-Ereignis anstelle des Dokuments bereit Ereignis. Es ist nicht so präzise, ​​da das gesamte Dokument geladen werden muss, aber Sie können sicher sein, dass das Bild geladen wurde (vorausgesetzt, es handelt sich um ein Bild im Code, nicht um ein AJAX-geladenes Ding). –

+2

@Frank, body onload wird aufgerufen, wenn das DOM fertig erstellt wurde, es ist jedoch nicht garantiert, dass die Assets innerhalb des DOM vollständig geladen sind (Bilder enthalten). – JasonWyatt

9

Wie Josh erwähnt, wenn das Bild noch nicht vollständig geladen ist, wird jQuery nicht wissen, was die Dimensionen noch sind. Versuchen Sie so etwas wie dies, um sicherzustellen, Sie versuchen, nur den Zugriff auf es Dimensionen, nachdem das Bild vollständig geladen ist:

var img = new Image(); 

$(img).load(function() { 
    //-- you can determine the height before adding to the DOM 
    alert("height: " + img.height); 
    //-- or you can add it first... 
    $('body').append(img); 
    //-- and then check 
    alert($('body img').height()); 
}).error(function() { 
    //-- this will fire if the URL is invalid, or some other loading error occurs 
    alert("DANGER!... DANGER!..."); 
}); 

$(img).attr('src', "http://sstatic.net/so/img/logo.png"); 
1

Ein etwas hässlich, aber effektive Update, das ich verwenden, war eine Back-End-Sprache verwenden, in meinem Fall php, um die Höhe zu ermitteln und auf das Bild zu setzen, bevor Sie es an den Browser senden.

es ist hässlich, aber einfach und schnell

1

das Bild im Voraus laden und eine Rückruffunktion einrichten könnte, was Sie suchen:

// simple image preloader 
function getHeight(el,fn) { 
    var img = new Image(); 
    img.onload = function() { fn(img.height); }; 
    img.src = el.attr("src"); 
} 

$("img").each(function(){ 
    getHeight($(this),function(h){ 
     // what you need to do with the height value here 
     alert(h); 
    }); 
}); 
-1

Gerade hatte das gleiche Problem: Stellen Sie die Breite und Höhe vorher über CSS oder HTML.

0

Nachdem nur einige Versuche gemacht mit diesem habe ich gefunden, dass

$(this).height(); 

Gibt 0 zurück - aber wenn Sie einfach nur alte JS

verwenden
this.height; 

ich die richtige Bildhöhe erhalten.