【问题标题】:Updating input values filled out by ng-repeat | Angular js更新由 ng-repeat | 填写的输入值角度js
【发布时间】:2026-01-31 16:05:02
【问题描述】:

我必须使用 ng-repeat 更新多个输入的值。我通常使用 JQuery $(class/id).val() 获取值并获取其值。但现在我不知道如何访问输入值,因为我每个只有一个 id。 (我在表中有 20 个输入)

查看:

<tr ng-repeat="i in list">

        <td><input list="itemNames" class="item_name" ng-model="i.item_name" value="{{i.item_name}}" type="text"/></td>

        <datalist id="itemNames">
           <option ng-repeat="ii in list" class="idI" ng-model="ii.idI"  data-item="{{ii.idI}}" value="{{ii.item_name}} {{ii.idI}}">
        </datalist>

        <td><input class="quantity" ng-model="i.quantity" value="{{i.quantity}}"  type="number"/></td>

        <td><input class="price" ng-model="i.price" value="{{i.price}}" type="number"/></td>
    <tr>
        <td ng-click="updateAll()">UPDATE</td>
    </tr>

</tr>

我希望将所有值存储在一个数组中,但我得到的只是第一行的值。

JS:

$scope.updateAll=function(){
    // getting vallues
    var item_name=$(".item_name").val();
    var quantity=$(".quantity").val();
    var price=$(".price").val();
}

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angularjs-ng-model


    【解决方案1】:

    我认为您的列表是一个范围变量。因此,在控制器中它定义为 $scope.list。使用 Angular 代码时无需考虑 id,Angular 框架会为您完成。

    由于您使用 ng-model 的双向数据绑定,因此对绑定变量的任何更改都将立即对控制器和 html 视图可见。 使用 ng-model 可确保立即更新 $scope.list 变量。

    例如,如果您在 html 视图的控件索引 0 中为“item_name”添加任何文本,则变量 $scope.list[0].item_name 将自动更新,$scope.list[0 中的更改也会自动更新].item_name = "Some name" in controller 将自动反映在视图中。

    所以,你给定的代码可以重写如下:

    <tr ng-repeat="i in list">
        <td><input list="itemNames_{{$index}}" class="item_name" id="txt_name_{{$index}}" ng-model="selectedValue" ng-change = "getSelectedId(selectedValue, $index)"  type="text"/></td>
        <datalist id="itemNames_{{$index}}">
           <option ng-repeat="ii in list" class="idI" ng-model="ii.idI"  data-item="{{ii.idI}}" value="{{ii.item_name}} {{ii.idI}}">
        </datalist>
        <td><input class="quantity" ng-model="i.quantity" value="{{i.quantity}}"  type="number"/></td>
        <td><input class="price" ng-model="i.price" value="{{i.price}}" type="number"/></td>
    <tr>
        <td ng-click="updateAll()">UPDATE</td>
    </tr>
    

    javascript方法可以写成:

    var getSelectedId = function(selectedValue, index) {
          var val = document.getElementById('txt_name_' + index).value;
          var text = $('#itemNames_' + index).find('option[value="' + val + '"]').attr('data-item');
          alert(text);
    }
    

    【讨论】:

    • 这太棒了!但我的问题是我有一个数据列表,我得到了正确的项目名称,但是如何获取 id?我会更新问题
    • 你想获取数据列表的ID吗?
    • 是的,我想获取所选 item_name 的 id,我在选项中将其设置为 data-item=ii.idi
    • 已添加更新代码,如果您需要更多支持,请提供 plnkr.co 链接。