2015-03-10 4 views
0

Я знаю, в чем проблема, но я не уверен, как ее исправить.Зацикливание строк таблицы, выборка и обновление строки

Он перебирает каждый tr, а затем отправляет на url, чтобы получить общее количество, к тому времени, когда сообщение возвращает значение, цикл достигнет последнего tr в таблице.

Итак, когда происходит обратный вызов .done, $ tr ссылается на последнюю строку в таблице.

Каков наилучший способ ссылки на исходный $ tr, на который был сделан почтовый вызов?

 $div.find('table tbody tr').each(function() { 
      $tr = $(this); 
      associationId = $tr.data('id'); 

      $.post(settings.UrlFetch, {competition_id: settings.CompetitionId, association_id: associationId}) 
       .done(function (res) { 

        if (res.success) { 
         $tr.find('.total').html('$' + Number(res.data.total).toFixed(2)); 
        } else { 
         alert(res.errors); 
        } 
       }) 
       .fail(function (res) { 
        alert("Unknown Error Occurred"); 
       }); 

     }); 

ответ

1

Проблема вы используете глобальную переменную $tr который переопределен в каждой итерации each обратного вызова, необходимо использовать переменную закрытия (объявляя $tr с помощью var), чтобы иметь локальный экземпляр $tr в каждый звонок обратного вызова

$div.find('table tbody tr').each(function() { 
    var $tr = $(this); //use local variable 
    associationId = $tr.data('id'); 

    $.post(settings.UrlFetch, { 
     competition_id: settings.CompetitionId, 
     association_id: associationId 
    }).done(function (res) { 

     if (res.success) { 
      $tr.find('.total').html('$' + Number(res.data.total).toFixed(2)); 
     } else { 
      alert(res.errors); 
     } 
    }).fail(function (res) { 
     alert("Unknown Error Occurred"); 
    }); 

}); 
+0

Я знал, что это будет просто, спасибо – bumperbox

Смежные вопросы