2009-08-18 5 views
10

J'ai une fonction resizePreview() qui va redimensionner une image dans une boîte de dialogue jQuery si l'image est trop grande. Cette image peut être modifiée par l'utilisateur. Mon code ressemble à ceci:Événement JavaScript pour quand l'attribut 'src' de l'image est changé?

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

resizePreview() utilise $('#imagePreview').width() et .height() pour obtenir les dimensions et redimensionne en conséquence. Le problème est que la nouvelle image n'est pas chargée au moment où resizePreview() est appelée, de sorte que l'image est redimensionnée en fonction de ses dimensions d'origine, et non en fonction des dimensions de l'image nouvellement chargée.

Si je mets un alert() appel entre les deux lignes de code cela fonctionne (puisque l'alerte donne au navigateur suffisamment de temps pour charger la nouvelle image). Apparemment, je devrais utiliser un événement? Existe-t-il un événement existant ou existe-t-il un moyen de le faire lorsque l'image src a changé (un peu comme un événement onChange, mais pour cet attribut) ou lorsque la nouvelle image a été chargée? Merci pour votre temps.

Répondre

17

L'événement load fonctionne qu'avec des images:

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

Je l'ai eu au travail, merci! – CMB

+0

Je crois que c'est le bon lien: http://api.jquery.com/load-event/ – mxro

+0

J'ai utilisé ce code avant $ (window) .load(); et $ (document) .ready(); et a travaillé. – ivahidmontazer

5

objets de l'image permettent la fixation des écouteurs d'événements onload:

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

Merci pour votre aide! – CMB

Questions connexes