点击按钮时如何获取同级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
相关产品推荐
相关产品推荐

