2010-09-13 22 views
6

Je testais avec parent() et nearest(), aucun travail dans la fonction.jQuery - parent() ne fonctionnant pas dans la fonction de rappel

TD reste le même, aucun changement en utilisant cette méthode:

$.get('form.php', function(data){ 
    alert(data); 
    $(this).closest('td').html('Done!'); 
}); 

TD est mis à jour, cette méthode fonctionne:

$.get('form.php', function(data){ 
    alert(data); 
}); 
$(this).closest('td').html('Done!'); 

Pouvez-vous s'il vous plaît me aider à comprendre pourquoi le fait closest('td') ne fonctionne pas dans la fonction de rappel?

Répondre

6

Votre this à l'intérieur de la fonction de rappel a une autre portée que le this à l'extérieur. Vous devez faire quelque chose comme ceci:

var self = this; 
$.get('form.php', function(data) { 
    alert(data); 
    $(self).closest('td').html('Done!'); 
}); 

Vous pouvez utiliser jQuery de .proxy()-function pour obtenir l'effet désiré, aussi, comme Patrick dw a souligné dans son poste. Je recommande de lire à travers this document.

+0

C'était rapide, et ça a marché! Je n'étais pas conscient que 'ceci 'fonctionne différemment à l'intérieur d'un $ .get, une autre leçon à apprendre. Merci à vous deux! –

+0

'this' fonctionne différemment à l'intérieur de différentes fonctions. JavaScript a une portée de fonction. 'this' pointe vers le contexte/la portée actuel. – jwueller

3

Vous pouvez utiliser jQuery's $.proxy method pour le deuxième argument pour $.get() pour conserver la valeur souhaitée de this.

$.get('form.php', $.proxy(function(data) { 
    alert(data); 
    $(this).closest('td').html('Done!'); 
}, this));