2011-08-10 3 views
0
function loadImage(url) { 

    var retval=0; 

    var img = new Image(); 

    $(img).attr('src', url) 
      .appendTo("#test") 
      .load(function() { 
       $(this).hide().fadeIn(); 
       retval=true; 
      }) 
      .error(function() { 
       $(this).remove(); 
       retval=false; 
      }); 

    return retval; 

} 

Cette fonction retourne toujours 0 :(jQuery Chargement des images de manière synchrone avec .load

Je suppose que je ne peux pas remplacer la variable globale (retval) en raison de la façon asynchrone behavoir de la fonction .load. Tout ? idées pour une solution de contournement je voudrais savoir comme que la fonction indique également si l'image à distance donnée existe ou non

Répondre

0

essayer.

function loadImage(url) { 

var retval=0; 

var img = new Image(); 

$(img).load(function() { 
      $(this).hide().fadeIn(); 
      retval=true; 
     }) 
     .error(function() { 
      $(this).remove(); 
      retval=false; 
     }) 
     .attr('src', url) 
     .appendTo("#test") 
     ; 

return retval; 

} 

Vous liant gestionnaires d'événements (charge et erreur) après que vous avez fait le chargement et l'ajout lui-même.

EDIT: suggestion supprimée pour renvoyer la valeur des événements (ne fonctionnera pas ofcourse)

+0

Même résultat que avec mon snipped. Et si je laisse retourner true/false depuis les gestionnaires d'événements, la fonction loadImage ne renvoie logiquement rien. – lorus

+0

Ah, le code que vous renvoyez est renvoyé avant que l'image soit chargée (asynchrone), donc la valeur est toujours 0. Essayez de définir la valeur de retval comme -1 et définissez un délai qui s'appelle chaque 500ms et renvoie seulement le retval quand c'est différent -1. – Rickjaah

+0

@lorus Cela a-t-il fonctionné? Veuillez répondre ou marquer cette réponse comme solution. – Rickjaah

Questions connexes