【问题标题】:execute callback after jquery each iterationjquery 每次迭代后执行回调
【发布时间】:2012-10-26 21:15:33
【问题描述】:

如何在每次迭代完成后正确执行函数 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);

感谢理查德的建议

【问题讨论】:

    标签: jquery callback each


    【解决方案1】:

    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();
    

    【讨论】:

    • 我希望就这么简单,它们都是在 ajax 函数中执行的
    • 如果所有这些代码都放在单个 ajax 调用的成功/完成函数中,这应该没问题。如果您有多个 ajax 调用,那么您可能希望使用这些详细信息更新您的问题
    • 它的运行速度比每个都快!
    【解决方案2】:

    将对f() 的调用放在each() 回调的主体中:

    $.each(rest, function(idx, val,f) { 
        //alert(idx + ': ' + val); 
        // -Snip-
        $('.tag_cloud.'+idx).addClass('reminder');
        f();
    });
    

    【讨论】:

    • 也许,我应该这样做,因为如果我把它放在每个之外,它会比每个更快。
    • 如果你把它放在 each 之外,f() 会被调用一次。如果你把它放在里面,f() 会为每个选定的元素调用。你要哪个?
    • 在外面跑得比每个都快,这就是问题
    • 所以每个都有回调!我像你说的那样把对 f 的调用放在了里面,并改变了 f 中的代码,所以它不再是多余的了,谢谢@George
    【解决方案3】:
    group = $("p")
    $.each(group, function(idx, val,f) { 
      alert(idx + ': ' + val); 
      if(idx == group.length - 1)
          alert("done");
    });
    

    凌乱的方式:P

    http://jsfiddle.net/cwDjL/

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2010-11-21
      • 2011-11-13
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多