清除从索引

时间:2015-06-26 14:52:47

标签: javascript arrays angularjs

我有一个数组betSlip,我正在做一些验证,让我们说数组现在有4个索引,每个索引都有input所以我有4个输入,每个索引一个。

示例:我在输入中键入的值:

  

1输入:10

     

2输入:10

     

3输入:10

     

4输入:10

下一个输入不能大于前一个。 在我的应用程序中意味着如果我转到第二个输入并输入数字1,输入3和4应该再次返回0。但是到目前为止,我在我的应用程序中已经有了它,如果你在第二个输入中键入1,那么只有第三个输入会回到0而不是其他输入。

所以,要明确:如果我有10个输入,我在每个输入中输入数字100,然后我转到第3个输入并输入99,那么其余的输入应该回到0.除了以前的输入。

我正在使用Angular和Lodash。

我拍了几张照片

enter image description here

在这个图像中,我在第二个输入中键入1,只有第三个输入在0,我需要将每个输入重新设置为0,与当前索引分开。

enter image description here

这里是我的代码:

$scope.riskWinCalculations2 = function(slip, type, index) {
  var previousSlip = $scope.betSlip[index - 1],
      currentSlip = $scope.betSlip[index],
      nextSlip = $scope.betSlip[index + 1];


      if (currentSlip.risk.length && nextSlip != undefined) {
        if (currentSlip.risk < nextSlip.risk) {
          nextSlip.risk = 0;
          nextSlip.win = 0;
        }
      }
}

我知道我的错误就在这个var nextSlip中,我所做的就是告诉应用程序在下一个输入中放入一个空字符串,如果当前的一个数量较少。但这就是为什么我在这里,我需要知道如何解决它,考虑所有下一个输入,而不仅仅是正确的下一个输入。

此外,I made a video

更新以添加更多解释

如果每个输入都有10作为值,并且您有5个输入,则表示:

  

1输入:10

     

2输入:10

     

3输入:10

     

4输入:10

     

5输入:10

如果你转到第3个输入并输入5,则表示:

  

1输入:10

     

2输入:10

     

3输入:5

     

4输入:0

     

5输入:0

所以,正如您所看到的那样,其他输入返回到0,这是初始值。但以前的输入保持不变。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我使用ng-repeatng-blur完成了上述逻辑。如果缺少任何逻辑,请告诉我。

<div ng-app>
  <h2>Todo</h2>
  <div ng-controller="TodoCtrl">
      <p ng-repeat='data in datas'>
          <label>{{$index+1}}</label><input  ng-model='data.value' ng-blur='checkRisk($index)'/>      
      </p>
  </div>
</div>


function TodoCtrl($scope) {
    $scope.datas = [{value:10},{value:10},{value:10},{value:10},{value:10}];   
    $scope.checkRisk = function(index){       
        for(var i=index+1;i<$scope.datas.length;i++){                
                $scope.datas[i].value=0;
            }        
    };
}

检查jsFiddle http://jsfiddle.net/gopinathshiva/U3pVM/16711/

答案 1 :(得分:1)

      //if the user tries to play with the input:
      //he can not put lower amount in a previous input,
      //when the next input is already filled out
      _.each($scope.betSlip, function(slip, indexSlip) {
        if (indexSlip > index) {
          slip.risk = '';
          slip.win = '';
        }
      });