2011-06-29 13 views
7

mam jakiś skrypt jquery, która biegnie po zamknięciu okna załadowaniuszerokość powrocie 0 w jQuery

$(window).load(function() { 
    $('.picture a img').each(function(index) { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 

    }); 
}); 

zawsze dotrzesz „nie” od tego, kiedy wiem, że niektóre obrazy powinny być „tak”. Kiedy śledzę skrypt w chrome, zauważyłem, że $(this).width() zawsze zwraca 0. go i googled dookoła, a niektóre sugestie były, że obrazy nie zostały załadowane, ale tutaj użyłem metody window.load, którą uważam, że powinna działać po załadowaniu wszystkiego. jakieś pomysły??

dzięki za wszelką pomoc z góry

+0

Czy można wkleić adres URL do obrazów i/lub nagłówków HTTP dla obrazów? Czy jest to spójna przeglądarka x? –

+0

A jeśli usuniesz z niego cały CSS (pozycja absolutna, wysokość, pływak w lewo)? –

+2

To nie wydaje się ostrzegać 0 dla mnie w chrome ... http://jsfiddle.net/MS7dU/. Czy możesz odtworzyć problem na [jsfiddle] (http://www.jsfiddle.com)? –

Odpowiedz

1

Chrome jest dziwny w kwestii szerokości obrazu. Zauważyłem to podczas budowania galerii zdjęć jQuery. Jeśli twoja szerokość obrazu nie jest ustawiona w tagu, chrome zwróci 0. FF, a IE określi szerokość, ale chrome nie. Spróbuj właściwie ustawić szerokość i sprawdź, czy uzyskasz pożądany wynik.

<img width="200" src="..." /> 
-5

Prawidłowe metody użyć, aby uruchomić skrypty po dom zakończeniu ładowania, to:

$(document).ready(function() { /*your code here*/ }); 
+2

'ready' specjalnie strzela przed załadowaniem obrazów. –

0

spróbować

if ($(this).attr("width") > $(this).attr("height")) {

0

spróbuj dodać zdarzenie obciążenia na obrazie, więc będzie ono wykonywane tylko po pełnym załadowaniu obrazu.

$(window).load(function() { 
    $('.picture a img').each(function(index) { 
    $(this).bind('load', function() { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 
    }) 
    }); 
}); 

można także spróbować sprawdzanie this.complete na obiekcie obrazu

+0

Zdarzenia 'load' są bardzo niespójne w przeglądarkach na różnych obrazach. Z [load docs] (http://api.jquery.com/load-event/) "Zdarzenia typu" Ostrzeżenia o obciążeniu "w przypadku korzystania z obrazów: Najczęstszym wyzwaniem, które programiści próbują rozwiązać za pomocą skrótu .load(), jest wykonać funkcję, gdy obraz (lub zbiór obrazów) został całkowicie załadowany.Jest kilka znanych zastrzeżeń, które należy odnotować. Są to: Nie działa spójnie ani niezawodnie w różnych przeglądarkach ... " –

1

trzeba uruchomić swój kod, gdy obraz jest załadowany, następujący kod powinien działać:

$(window).load(function() { 
    $('.picture a img').load(function() { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 
    }); 
}); 

zauważ, że każdy element DOM, który ma jakiś zasób sieciowy powiązany z (window, img, iframe) reaguje na zdarzenie .load().

0

Chciałem tylko dodać, że powinieneś również upewnić się, że twój obraz jest rzeczywiście widocznym elementem. Miałem wiele problemów w przeszłości, próbując zmierzyć widoczne: ukryte lub wyświetlające: żadne elementy. Jeśli rzeczywiście próbą zmierzenia ukrytego elementu, można ominąć to wykonując coś jak

var width = $('img').show().width(); 
$('img').hide(); 

Teraz, kod jest bardzo niejasne, ale daje moją myśl za widoczność migania.

Powiązane problemy