2009-08-18 16 views
10

Mam funkcję resizePreview(), która zmieni rozmiar obrazu w oknie dialogowym jQuery, jeśli obraz jest zbyt duży. Ten obraz może zostać zmieniony przez użytkownika. Mój kod wygląda mniej więcej tak:Zdarzenie JavaScript w przypadku zmiany atrybutu "src" obrazu?

$('#imagePreview').attr('src', newImageSrc); 
resizePreview(); 

resizePreview() wykorzystuje $('#imagePreview').width() i .height() dostać wymiarów i odpowiednio zmienia rozmiar. Problem polega na tym, że nowy obraz nie jest ładowany przez czas, dlatego obraz jest zmieniany zgodnie z jego oryginalnymi wymiarami, a nie zgodnie z wymiarami nowo załadowanego obrazu.

Jeśli wstawię połączenie alert() pomiędzy dwoma wierszami kodu, działa (ponieważ alarm daje przeglądarce wystarczającą ilość czasu na załadowanie nowego obrazu). Podobno powinienem skorzystać z imprezy? Czy istnieje jakieś wydarzenie, czy też istnieje sposób, w jaki mogę je wykonać, ponieważ po zmianie obrazu src (coś w rodzaju zdarzenia onChange, ale w przypadku tego atrybutu) lub po zakończeniu ładowania nowego obrazu? Dziękuję za Twój czas.

Odpowiedz

17

Impreza load działa na obrazy:

$('img.userIcon').on('load', function() { 
    $(this).toggleClass('bigImg', $(this).height() > 100); 
}); 
+0

Gotowy do pracy, dzięki! – CMB

+0

Wierzę, że jest to poprawny link: http://api.jquery.com/load-event/ – mxro

+0

Użyłem tego kodu przed $ (window) .load(); i $ (dokument) .ready(); i pracował. – ivahidmontazer

5

obiekty graficzne umożliwiają zamocowanie detektorów zdarzeń onload:

var img = new Image; 
img.onload = function() { 
    alert("Loaded"); 
}; 
img.src = "dummy-picture.png"; 
+0

dzięki za pomoc! – CMB

Powiązane problemy