【问题标题】:How to always keep the sum of values of dynamically generated input boxes equal to a specific result in AngularJS?如何始终保持动态生成的输入框的值之和等于AngularJS中的特定结果?
【发布时间】:2026-02-02 16:20:10
【问题描述】:

我正在生成一组动态输入框,我希望始终保持值的总和等于特定结果。因此,当我更改输入框的任何值时,其他值应该以保持总和不变的方式更改。我该如何使用AngularJS

下面是我的div

<div data-ng-repeat="item in SecurityAllocationList track by $index">
    <input type="number" data-ng-model="item.InvestAmount" />
</div>

我想实现这个

【问题讨论】:

  • 在每个文本框中使用 ng-change 并使用 ng-model 更改其他文本框的值。
  • 假设我必须得到 1000 作为总和并生成 4 个文本框。因此,第一个文本框填充了 1000,其余三个文本框填充了 0。现在,在第二、第三和第四个文本框中,如果我每个输入 50,它应该在所有文本框中分别显示 850、50、50、50。如何实现?
  • 来自如何提问 (*.com/help/how-to-ask):“包含足够的代码以允许其他人重现问题。有关此方面的帮助,请阅读如何创建最小、完整和可验证的示例。”您需要向我们展示您尝试过的内容,或者至少向我们展示您的控制器代码以及动态生成的输入框的模型
  • 你想如何分配值?
  • 6 inputs和总数9000的情况下,我将first输入框编辑为100,那么剩余值应该如何分配。之后我编辑fifth 文本框我已经更改的first 输入框的行为是什么?

标签: angularjs html


【解决方案1】:

你需要一个函数来计算当一个变化时以及可能在页面加载时的数量,如下所示:

  $scope.recalc = function(item) {

    var itemCount = $scope.SecurityAllocationList.length;
    var denominator = itemCount;

    var numerator = $scope.totalAmt;
    if (item) {
      numerator = $scope.totalAmt - item.InvestAmount;
      denominator -= 1;
    }
   var remaining = numerator / denominator;
   angular.forEach($scope.SecurityAllocationList, function(inv) {
      if (inv !== item) {
       inv.InvestAmount = remaining;
     }
    });
  };

这将从输入元素上的 ng-change 指令调用,如下所示:

<input type="number" data-ng-model="item.InvestAmount" ng-change="recalc(item)"/>

我创建了一个 plunker here 来说明。

【讨论】:

  • plunker 输出告诉无法连接到任何应用程序实例。
  • 是的,我认为 plunker 存在一些服务器问题,但您应该能够看到代码
  • 我刚刚注意到您可以单击 plunker 预览窗格右上角的“在单独的窗口中启动预览”图标,您可以看到它正在工作
最近更新 更多