2010-09-13 1 views
6

Stavo testando con parent() e closest(), nessuno funziona all'interno della funzione.jQuery - parent() non funziona all'interno della funzione di callback

TD rimane lo stesso, nessun cambiamento con questo metodo:

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

TD viene aggiornato, questo metodo funziona:

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

Potete per favore aiutarmi a capire il motivo per cui lo fa closest('td') non funziona all'interno della funzione di callback?

risposta

6

Il this all'interno della funzione di callback ha un altro ambito rispetto allo this all'esterno. Hai bisogno di fare qualcosa di simile:

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

È possibile utilizzare jQuery di .proxy()-function per ottenere l'effetto desiderato, anche, come Patrick dw ha sottolineato nel suo post. Raccomando di leggere attraverso this document.

+0

Questo è stato veloce e ha funzionato! Non ero consapevole del fatto che "questo" funzioni diversamente all'interno di $ .get, un'altra lezione da imparare. Grazie ad entrambi! –

+0

'questo' funziona in modo diverso all'interno di diverse funzioni. JavaScript ha scope di funzioni. 'this' punta al contesto/ambito corrente. – jwueller

3

È possibile utilizzare jQuery's $.proxy method per il secondo argomento per $.get() per mantenere il valore desiderato di this.

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