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

AngularJS中ng-checked搭配ng-change从选中到未选中时失效问题

解决AngularJS复选框取消选中时ng-change不触发的问题

你的问题根源在于同时使用ng-model和ng-checked导致的状态冲突,而且ng-model绑定的字段也不对,下面是具体的解决方案:

问题分析

你当前的代码中,ng-model绑定的是question.questionId(这是一个标识ID,并非布尔值),而ng-checked依赖的是question.active。AngularJS中ng-model是双向绑定,会优先控制复选框的状态,这就导致视图的选中状态和模型值完全脱节——取消选中时,question.questionId根本不会变化,所以ng-change自然不会触发。

修复代码

把ng-model直接绑定到question.active,同时移除ng-checked(因为ng-model会自动同步复选框的选中状态):

<label class="switch">
  <input type="checkbox" 
         ng-model="question.active" 
         ng-change="questionStatusChange(question.questionId, question.active)">
  <span class="slider round"></span>
</label>

控制器代码不需要修改,因为现在ng-change传递的question.active就是切换后的最新状态:

$scope.questionStatusChange = function(questionId, status) {
  console.log(status); // 选中时输出true,取消选中时输出false
}

为什么这样有效?

  • ng-model="question.active"会让复选框的选中状态和question.active双向同步:点击复选框时,question.active会自动更新为对应的布尔值(true/false)。
  • ng-change会在模型值更新后触发,此时传递的question.active就是切换后的真实状态,无论选中还是取消选中都会正常触发回调。

内容的提问来源于stack exchange,提问作者Mr world wide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:53