2010-09-13 16 views
6

Ich habe mit parent() und am nächsten() getestet, keiner arbeitet innerhalb der Funktion.jQuery - Parent() funktioniert nicht innerhalb der Callback-Funktion

TD gleich bleibt, keine Änderung dieser Methode: aktualisiert wird

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

TD, diese Methode funktioniert:

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

Können Sie mir bitte helfen herauszufinden, warum tut closest('td') funktioniert nicht innerhalb der Callback-Funktion?

Antwort

6

Ihre this innerhalb der Callback-Funktion hat einen anderen Bereich als die this auf der Außenseite. Sie brauchen so etwas wie dies zu tun:

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

Sie jQuery verwenden können .proxy()-function die gewünschte Wirkung zu erzielen, auch, wie Patrick dw in seinem Beitrag darauf hingewiesen. Ich empfehle das Lesen this document.

+0

Das war schnell, und es hat funktioniert! Ich war mir nicht bewusst, dass "dies" in einem $ .get anders funktioniert, eine andere Lektion, die es zu lernen gilt. Danke euch beiden! –

+0

'this' funktioniert in verschiedenen Funktionen anders. JavaScript hat Funktionsumfang. "Dies" weist auf den aktuellen Kontext/Anwendungsbereich hin. – jwueller

3

Sie können jQuery's $.proxy method als zweites Argument für $.get() verwenden, um den gewünschten Wert von this beizubehalten.

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