angularjs + Jquery:foreach循环没有正确退出

时间:2013-10-12 22:53:32

标签: jquery .net angularjs

更新:我更新了大括号

我在保存之前有验证方法。有一个foreach循环执行,如果一个条件满足则应该返回bool标志并且应该退出

$.each($scope.vacationSummaries, function (i, v) 
  {
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id))
       {
        if (v.Remaining > 0)
        return true; //for returning a true flag for save
       }
   return false; // for exiting for each loop
  });

..但它会返回false标志以进行保存而不会退出每个

我该怎么办?

2 个答案:

答案 0 :(得分:1)

:更正代码后编辑

所以你的问题是,如果两个if语句的条件匹配,你想返回true。这在$ .each循环中不起作用,因为循环只是将函数作为集合中每个项的回调运行。

它基本上和你想要的一样

 for(var key in $scope.vacationSummaries){
     var v = $scope.vacationSummaries[key];
     ...
 }

在每个循环中,你不能使用return。

相反,您必须对对象实例v执行某些操作。如果要标记某些内容,请在开始循环之前定义变量并指定true或false。只需标记循环内的对象即可。或者,如果您想对该对象执行某些操作,请调用另一个函数...

一些例子:

var flag=false;
$.each($scope.vacationSummaries, function (i, v) 
{
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id))
    {
        if (v.Remaining > 0) {
            flag = true; //assigning flag which can be used after the loop?
            save(v); // call a method which does something with v?
        }
    }
    return false; // for exiting for each loop
});

老实说,我并不完全知道你想要实现什么,因为我只能看到你代码的这一小部分;) 简单地想一下$ .each方法,好像它对C#或JavaScript中的每个循环都是正常的,并相应地实现你的逻辑

答案 1 :(得分:0)

$scope.vacations = function() {
  var check = false;

  angular.forEach($scope.vacationSummaries,function(v,i) {
    if (Number($scope.vacationRequest.VacationType.Id) == Number(v.VacationType.Id)) {
          if (v.Remaining > 0) {
            check = true; //for returning a true flag for save
          }
    } else {
      check = false; // for exiting for each loop
    }
  });

  return check;

}