jQuery - parent () не работает в функции обратного вызова - PullRequest
6 голосов
/ 13 сентября 2010

Я тестировал с parent () и closest (), ни одна из них не работает внутри функции.

TD остается тем же, без изменений, используя этот метод:

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

TD обновляется, этот метод работает:

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

Не могли бы вы помочь мне выяснить, почему closest('td') не работает в функции обратного вызова?

Ответы [ 2 ]

6 голосов
/ 13 сентября 2010

Ваша this внутри функции обратного вызова имеет другую область видимости, чем this снаружи.Вам нужно сделать что-то вроде этого:

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

Вы можете использовать функцию jQuery .proxy() , чтобы достичь желаемого эффекта, как указал Патрик Д.В.Я рекомендую прочитать этот документ .

3 голосов
/ 13 сентября 2010

Вы можете использовать метод jQuery $.proxy для второго аргумента $.get(), чтобы сохранить желаемое значение this.

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