2013-09-22 7 views
0

我想根據ajax響應淡出一組div。這段代碼沒有做我想做的。

我在做什麼錯?

$('.view_result').click(function() { 
    $('.result_bar').fadeIn(); 
    var set = $('.result_bar'); 
    for(var i = 0; i < set.length; i++) { 
     $.post('get_votes.php', {'id':$(set[i]).attr('name')}, function(data) { 
      $('.result_bar')[i].fadeOut(); //--> Didn't Work 
      $(set)[i]).fadeOut(); //--> Didn't Work 
      set[i].fadeOut();// --> Didn't Work 
     }); 

    } 
return false; 
}); 
+0

變量i將始終設置爲set.length - 在後成功1功能。看看這個:http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –

+0

謝謝,但$(設置[0])。fadeOut()不起作用太... – Praveen

+0

你確定嗎?對於所有3次調用fadeOut,您的原始代碼片段在錯誤的地方都有括號。 –

回答

2

問題是在回調函數中使用閉包變量i

在你的情況,因爲set是一個jQuery的包裝,你可以使用.each()迭代,而不是使用for循環

$('.view_result').click(function() { 
    $('.result_bar').fadeIn(); 
    var set = $('.result_bar'); 

    set.each(function(idx, el){ 
     $.post('get_votes.php', { 
      'id': $(el).attr('name') 
     }, function (data) { 
      $(el).fadeOut(); //--> Didn't Work 
     }); 
    }) 
    return false; 
}); 
+0

完美.....你是老闆... –