выполнить обратный вызов после jquery каждой итерации

Как я могу правильно выполнить функцию f после завершения каждой итерации, чтобы я мог подсчитать элементы с этим конкретным классом?

Это дает 0 вместо 16;

f = check_hfouten();
$.each(rest, function(idx, val,f) { 
  //alert(idx + ': ' + val); 
  $('td.info.'+idx).children('span').addClass('fout').attr('title',val).end().parent('tr').find('input').addClass('overlayed').click(function(){$(this).removeClass('overlayed')});
    $('.tag_cloud.'+idx).addClass('reminder');
}).function(f);

спасибо в рекламе Ричард


person Richard    schedule 09.08.2011    source источник


Ответы (3)


Поместите вызов f() в тело обратного вызова each():

$.each(rest, function(idx, val,f) { 
    //alert(idx + ': ' + val); 
    // -Snip-
    $('.tag_cloud.'+idx).addClass('reminder');
    f();
});
person George Cummins    schedule 09.08.2011
comment
может быть, я должен сделать это, потому что, если я поставлю его вне каждого, он будет быстрее, чем каждый. - person Richard; 09.08.2011
comment
Если вы поместите его вне каждого, f() будет вызван один раз. Если вы поместите его внутрь, для каждого выбранного элемента будет вызываться f(). Какой ты хочешь? - person George Cummins; 09.08.2011
comment
снаружи он работает быстрее, чем каждый, в этом проблема - person Richard; 09.08.2011
comment
Так что у каждого есть обратный вызов! Я поместил вызов f внутрь, как вы сказали, и изменил код в f, чтобы он больше не был избыточным, спасибо @George - person Richard; 10.08.2011

each не является асинхронным, поэтому вам не нужен обратный вызов. Просто вызовите его последовательно:

f = check_hfouten();

$.each(rest, function(idx, val) { 
  //alert(idx + ': ' + val); 
  $('td.info.'+idx).children('span').addClass('fout').attr('title',val).end().parent('tr').find('input').addClass('overlayed').click(function(){$(this).removeClass('overlayed')});
    $('.tag_cloud.'+idx).addClass('reminder');
});

f();
person James Montagne    schedule 09.08.2011
comment
Я надеюсь, что это так просто, они оба выполняются внутри функции ajax. - person Richard; 09.08.2011
comment
Если весь этот код помещен в функцию успеха/завершения одного вызова ajax, все должно быть в порядке. Если у вас есть несколько вызовов ajax, вы можете обновить свой вопрос с этими данными. - person James Montagne; 09.08.2011
comment
он работает быстрее, чем каждый! - person Richard; 09.08.2011

group = $("p")
$.each(group, function(idx, val,f) { 
  alert(idx + ': ' + val); 
  if(idx == group.length - 1)
      alert("done");
});

Грязный путь :P

http://jsfiddle.net/cwDjL/

person Joseph Marikle    schedule 09.08.2011