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
相关产品推荐
相关产品推荐

