).
Stackblitz:
Пожалуйста, проверьте: https://stackblitz.com/edit/angularjs-vc9lg5
У меня есть номер Total expense
и таблица данных.
Есть столбец Amt
.Столбец содержит авансовый платеж, который можно вычесть и оплатить до текущих расходов (1000), введя в поле ввода рядом с Amt
.
. Как видно из третьего столбца, я ввел 500, сейчасЯ могу ввести 500 в первом ряду (или 100 во втором и 400 в первом ряду).
На ng-change
поля ввода Я проверяю, превышает ли введенная сумма остаток, вычитаемый из общей суммы расходов, путем вычисления deductedTillNow
и balanceLeftInExpense
.
В расширении Chrome вы можете видеть значения $scope
переменных deductedTillNow
и balanceLeftInExpense
справа.Когда я пытаюсь вычесть оставшиеся 500 из первой строки, введя 50
, balanceLeftInExpense
становится 450.
Таким образом, моя проверка не позволяет ввести следующий номер, так как следующую цифру, которую я пытаюсь ввестипосле 50
, 0
значение balanceLeftInExpense
равно 450
, а значение 500 больше 450. Как мне разрешить ввод 500?
//calculate amount till now
$scope.deductedTillNow = 0;
for (let j = 0; j < $scope.amountLedgerListArray.length; j++) {
if($scope.amountLedgerListArray[j].adjustAmount){
$scope.deductedTillNow = $scope.amountLedgerListArray[j].adjustAmount + $scope.deductedTillNow;
}
}
//calculate balance left in expense
$scope.balanceLeftInExpense = $scope.totalExpenseAmount - $scope.deductedTillNow;
Проверьте, превышает ли введенная сумма balanceLeftInExpense
- VAlidation:
if(item.adjustAmount > $scope.balanceLeftInExpense){
item.adjustAmount = item.adjustAmount.toString();
item.adjustAmount = item.adjustAmount.substring(0, item.adjustAmount.length - 1);
item.adjustAmount = parseInt(item.adjustAmount);
}
html:
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Payment Ref no</th>
<th>Date</th>
<th>Amt</th>
<th >Adjust amount</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in amountLedgerListArray">
<td>
{{item.payment_ref_no}}
</td>
<td>
{{item.payment_date}}
</td>
<td>
{{item.amount}}
</td>
<td>
<input type="number" name="sgst" class="form-control"
ng-disabled="item.isDisabled" autocomplete="off"
ng-change="calculateBalanceAndRestrict(item)"
ng-class="{'borderRedError' : expense.$invalid}"
ng-model="item.adjustAmount" onkeypress="limitKeyPress(this, 10, event)" />
</td>
</tr>
</tbody>
</table>
Редактировать : Данные в столбце Amt - это суммы авансовых платежей, которые уже выплачены.Теперь есть расходы (1000 в этом примере. Смотрите скриншот Total expense:1000
).Я могу вычесть из любой строки в столбце Amt
.
Здесь я вычел 500 из третьего ряда (Баланс сейчас: 500).Я могу вычесть оставшиеся 500 из двух верхних рядов.Либо 100 из второго ряда (так как у него только 100), а затем оставшиеся 500 из первого ряда ИЛИ оставшиеся 500 из первого ряда.
Я проверяю так: при изменении поля ввода я проверяю, является ли суммавводимая сумма превышает сумму всех введенных сумм (deductedTillNow
).Теперь, когда я начинаю печатать в первой строке, вычисляется остаток средств в расходах.Когда я набираю 50, остаток составляет 450 (1000–500 (третий ряд) + 50 (первый ряд)).
Когда я набираю 0 после 50 для оставшихся 500 в первом ряду, остаток равен 450Так что моя проверка не позволяет этого (500 набрано больше, чем 450).Мне нужно позволить набрать 500.