You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS中如何获取ng-repeat生成的所有输入框修改后的值?

解决AngularJS ng-repeat输入框修改值获取问题

这个问题的核心是你还在沿用jQuery操作DOM的思路处理AngularJS数据,没用到Angular最核心的双向绑定特性,这才导致只能拿到第一行的值。咱们换Angular的正确方式来解决:

1. 修改视图:用ng-model替代value实现双向绑定

把原来的value="{{sf.xxx}}"替换成ng-model="sf.xxx",这样输入框的修改会自动同步到$scope.selectedFacture数组里的对应对象,完全不需要手动去DOM里取值:

<tr ng-repeat="sf in selectedFacture" ng-dblclick="editFacture();" >
  <td><input class="cls" ng-model="sf.fcls_crt" type="text"/></td>
  <td><input class="piece" ng-model="sf.fpiece" type="text"/></td>
  <td><input class="cls_gate" ng-model="sf.fcls_crt_gate" type="text"/></td>
  <td><input class="piece_gate" ng-model="sf.fpiece_gate" type="text"/></td>
  <td><input class="note" ng-model="sf.note" type="text"/></td>
</tr>

2. 修改JS函数:直接从$scope.selectedFacture获取所有修改后的值

现在selectedFacture数组已经实时同步了所有输入框的修改,你只需要遍历这个数组就能拿到所有行的最新值:

$scope.editFacture=function(){
  // 遍历所有行的修改后数据,整理成需要的格式
  let allEditedData = $scope.selectedFacture.map(sf => {
    return {
      fcls_crt: sf.fcls_crt,
      fpiece: sf.fpiece,
      fcls_crt_gate: sf.fcls_crt_gate,
      fpiece_gate: sf.fpiece_gate,
      note: sf.note
    };
  });

  // 控制台打印查看所有数据,方便调试
  console.log("所有修改后的数据:", allEditedData);
  
  // 如果需要弹窗展示,可将数组转为可读性强的字符串
  alert(JSON.stringify(allEditedData, null, 2));
}

为什么原来的代码只能拿到第一行?

因为jQuery的.val()方法当选择器匹配多个元素时,只会返回第一个匹配元素的值。如果非要用jQuery的方式(非常不推荐),你需要用.each()遍历所有匹配的输入框,但这完全违背了Angular的数据驱动理念,代码维护性和可靠性都会大打折扣。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:06:34