2010-12-11 7 views
2

vous avez donné un problème dans ce code, il me donne $ (this) .fadeIn() n'est pas une fonction, des idées?

$('img').hide().each(function(){ 
     $(this).load(function(){ 
      $(this).fadeIn(); 
     }); 
    }); 

Répondre

3

Si vous vouliez dire la fixation externe $ (ce) en fonction interne, vous pouvez faire:

$('img').hide().each(function(){ 
     var outer = $(this); 
     outer.load(function(){ 
      outer.fadeIn(); 
     }); 
    }); 
+0

Bonne réponse ... small nitpick (et puisqu'il s'agit d'un exemple de code, cela ne s'applique pas à cet exemple): c'est une bonne idée de donner des références à '$ (this)' un nom utile par opposition à 'outer' ... quelque chose comme' image_reference' serait plus utile. – Dancrumb

+0

La convention la plus commune que j'ai vu est d'utiliser 'that', ce qui rend également votre intention. – ClosureCowboy

+0

D'accord avec vous les gars - définitivement nécessaire d'utiliser des noms significatifs dans de vrais projets/situations. J'ai utilisé 'outer 'à dessein ci-dessus pour le rendre abstrait - vous avez un contexte externe commençant sur le premier et interne commençant sur la 4ème ligne de mon exemple. –

3

La valeur de this changements à l'intérieur des fonctions imbriquées - sa valeur est « capturé » la façon dont les autres variables sont.

Pour éviter cela, vous pouvez affecter this à une autre variable!

$('img').hide().each(function(){ 
    var that = $(this); 
    that.load(function(){ 
     that.fadeIn(); 
    }); 
}); 
+0

Merci beaucoup mon ami !! – trrrrrrm

0

Votre code est correct. Je ne sais pas quel serait le problème. Dans le gestionnaire d'événements .load(), this fait référence à l'élément qui a reçu l'événement, il ne devrait donc pas y avoir de raison de fermer le this externe.

Si vous ne faites rien d'autre dans le .each(), on pouvait se débarrasser de cette:

Exemple:http://jsfiddle.net/patrick_dw/b4cNZ/1/

$('img').hide().load(function() { 
    $(this).fadeIn(2000); 
}); 

Sinon, si vous avez besoin de tester pour vous assurer que la l'image se révèle quand mis en cache, vous pouvez le faire:

Exemple:http://jsfiddle.net/patrick_dw/b4cNZ/2/

$('img').hide().each(function() { 
    if (this.complete) { 
     $(this).fadeIn(2000); 
    } else { 
     $(this).load(function() { 
      $(this).fadeIn(2000); 
     }); 
    } 
});