2009-08-18 19 views
10

Ho una funzione resizePreview() che ridimensionerà un'immagine in una finestra di dialogo jQuery se l'immagine è troppo grande. Questa immagine può essere modificata dall'utente. Il mio codice più o meno così:Evento JavaScript per quando l'attributo dell'immagine 'src' è cambiato?

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

resizePreview() utilizza $('#imagePreview').width() e .height() per ottenere le dimensioni e ridimensiona di conseguenza. Il problema è che la nuova immagine non viene caricata dal momento in cui viene chiamato resizePreview() in modo che l'immagine venga ridimensionata in base alle dimensioni originali, non in base alle dimensioni dell'immagine appena caricata.

Se inserisco una chiamata da alert() tra le due righe di codice funziona (poiché l'avviso fornisce al browser il tempo necessario per caricare la nuova immagine). A quanto pare dovrei usare un evento? Esiste un evento esistente o esiste un modo per crearne uno, per quando l'immagine src è cambiata (un po 'come un evento onChange, ma per quell'attributo) o per quando la nuova immagine ha completato il caricamento? Grazie per il tuo tempo.

risposta

17

L'evento load funziona per le immagini:

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

Al lavoro, grazie! – CMB

+0

Credo che questo sia il link corretto: http://api.jquery.com/load-event/ – mxro

+0

Ho usato questo codice prima di $ (window) .load(); e $ (document) .ready(); e ha funzionato – ivahidmontazer

5

oggetti Image consentono l'attaccamento degli ascoltatori di eventi onload:

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

Grazie per il vostro aiuto! – CMB

Problemi correlati