4
$('.myElem').live('click', function() { 
    $(this).hide(500, function() { 
     $(this).siblings('.myOtherElem').show(); 
    }); 
}); 

Ce qui précède ne fonctionne pas car $(this) n'est plus dans la bonne portée dans le rappel. Comment puis-je transmettre mon élément source d'origine dans le rappel?jQuery récupère l'élément source dans le rappel

Répondre

7

En fait, votre code devrait fonctionner.

Pour accéder this dans une méthode javascript interne vous pouvez stocker la référence dans le champ d'application de la méthode extérieure:

$('.myElem').on('click', function() { 

    var myElem = this;  
    $(this).hide(500, function() { 
     $(myElem).siblings('.myOtherElem').show(); 
    }); 

}); 

Cependant, dans la plupart des méthodes jQuery this fait référence au sélecteur ou élément utilisé:

$('.myElem').on('click', function() { 
    // This refers to the clicked element 
    $(this).hide(500, function() { 
     // This refers to the clicked element as well 
     $(this).siblings('.myOtherElem').show(); 
    });  
}); 
2
$('.myElem').live('click', function() { 
    var $this = $(this); 
    $this.hide(500, function() { 
     $this.siblings('.myOtherElem').show(); 
    }); 
}); 
0
$('.myElem').live('click', function() { 
    $(this).hide(500); 
    $(this).siblings('.myOtherElem').show(); 
}); 
+0

Cela ne va pas accomplir la même chose. Mettre l'appel '.show()' dans le rappel assure que cela n'arrivera pas tant que l'animation '.hide()' ne sera pas terminée. Le code dans votre réponse les fera tous les deux se produire presque simultanément. –

+0

Vous pouvez le faire en utilisant 'delay':' .delay (500) .show (1) 'Cependant, utiliser le rappel' show' est la meilleure solution. – jantimon