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

点击按钮时如何获取同级select组件的选中值?

解决AngularJS中多组Select与按钮的选中值获取问题

你的核心问题在于AngularJS的ng-click中this的指向不是DOM元素,而是当前ng-repeat生成的子作用域对象,所以直接用$(btn)去操作DOM自然无效。下面给你两种解决方案,优先推荐符合Angular思想的方式:

方案一:使用Angular双向绑定(推荐)

完全避免DOM操作,通过ng-model绑定每个select的选中值,这是Angular的最佳实践:

修改后的HTML代码

<div class="form-group" ng-repeat="category in categories">
  <div id="kkal-type" class="form-options">
    <!-- 给每个select绑定ng-model,用$index区分不同组 -->
    <select name="{{cats[$index]}}" id="{{cats[$index]}}" ng-model="selectedValues[$index]">
      <option value="0" >--Не выбрано--</option>
      <option ng-repeat="food in category.foods" ng-show="food.available" value="{{food.cost}}">
        {{food.name+" - "+food.cost+"тг"}}
      </option>
    </select>
    <!-- 点击时传递当前组的索引$index -->
    <input type="button" value="ВЫБРАТЬ" class="choose-btn orange filled" ng-click="update($index)"/>
  </div>
</div>

控制器代码

// 初始化数组存储每组select的选中值
$scope.selectedValues = [];

$scope.update = function(index) {
  // 直接通过索引获取对应组的选中值
  const selectedCost = $scope.selectedValues[index];
  console.log(selectedCost);
};

这种方式的优势是完全遵循Angular的数据驱动思想,不需要手动操作DOM,代码更易维护和调试。

方案二:通过$event获取DOM元素(不推荐,但可快速修复)

如果你暂时不想改动绑定逻辑,可以通过$event参数获取点击事件的DOM元素,再查找同级的select:

修改后的HTML代码

<div class="form-group" ng-repeat="category in categories">
  <div id="kkal-type" class="form-options">
    <select name="{{cats[$index]}}" id="{{cats[$index]}}">
      <option value="0" >--Не выбрано--</option>
      <option ng-repeat="food in category.foods" ng-show="food.available" value="{{food.cost}}">
        {{food.name+" - "+food.cost+"тг"}}
      </option>
    </select>
    <!-- 传递$event对象到点击方法 -->
    <input type="button" value="ВЫБРАТЬ" class="choose-btn orange filled" ng-click="update($event)"/>
  </div>
</div>

控制器代码

$scope.update = function(event) {
  // event.target就是点击的按钮DOM元素,再找同级select
  const selectedValue = $(event.target).siblings('select').val();
  console.log(selectedValue);
};

为什么原来的代码失效?

在Angular的ng-click回调中,this指向的是当前ng-repeat创建的子作用域对象,而不是按钮的DOM元素。你之前把作用域对象传给$(btn),自然找不到同级的select元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:35