2012-11-16 5 views
1

Я не могу получить доступ к $ (this) из раздела $ .post. Он отлично работает за его пределами. Вот JavaScript:

$('.idea').each(function(){ 
     var title = $(this).html(); 
     $.post("votes.php", { title: title }, function(data){ 
      $(this).nextAll('.voteTotal').html(data); 
     }, "json"); 
    }); 

HTML:

<h3 class="idea">Idea #1</h3> 
<h4 class="voteTotal"></h4> 
<p>This is a really cool idea.</p> 
<a href="#" class="vote">Click to vote</a> 
+0

S ee также http://stackoverflow.com/questions/11297748/javascript-execution-context-of-function-argument/11297779#11297779 – Kos

+0

Ну, вы не используете его внутри '$ .post', а скорее в анонимной функции, которая получает вызовы с помощью функции async '$ .post'. –

ответ

4

Вы должны резервного this до функции обратного вызова:

$(".idea").each(function() { 
    var $this = $(this), 
     title = $this.html(); 

    $.post("votes.php", { title: title }, function(data) { 
     $this.nextAll(".voteTotal").html(data); 
    }, "json"); 
}); 
+1

Это не называется * backup *, а скорее бесплатная переменная * capture * ... –

0

Используйте параметр context, то он будет работать:

$('.idea').each(function(){ 
    var title = $(this).html(); 
    $.post("votes.php", { title: title, context: this }, function(data){ 
     $(this).nextAll('.voteTotal').html(data); 
    }, "json"); 
}); 
Смежные вопросы