gpt4 book ai didi

javascript - AngularJS 复选框 ng-change 问题与 $event.target

转载 作者:可可西里 更新时间:2023-11-01 01:35:48 25 4
gpt4 key购买 nike

我正在编写一个简单的 AngularJS Controller ,用于跟踪选中的复选框的数量。尝试避免使用 $scope.$watch 而是使用 ng-change 来增加/减少总计数。

HTML:

<form ng-controller="MainCtrl">
<table>
<tr ng-repeat="item in data">
<td>
<input type="checkbox"
value="{{item.id}}"
ng-model="item.selected"
ng-change="updateTotal($event)"> &nbsp; {{item.name}}
</td>
</tr>
</table>
<p>
Total checked: {{totalSelected}}
</p>
</form>

Controller 片段

$scope.updateTotal = function($event) {

var checkbox = $event.target;

if (checkbox.checked) {
$scope.totalSelected++;
}
else {
$scope.totalSelected--;
}
}

我在尝试访问 $event.target 的 Controller 中不断收到错误消息:

TypeError: Cannot read property 'target' of undefined

我创建了一个用于重新创建的 Plunk:http://plnkr.co/edit/qPzETejmMHHZCQ2sV2Sk?p=info

如果有人有任何想法或建议,我将不胜感激。

非常感谢!

最佳答案

ng-change 函数不允许将 $event 作为变量传递。

来自 AngularJS 官方 github 存储库中的合作者:

ng-change is not a directive for handling the change event (I realize that this is confusing given the name), but is actually instead notified when ngModelController.$setViewValue() is called and the value changes (because ng-change adds a listener to the $viewChangeListeners collection). So this is as expected.

您可以阅读更多相关信息 ng-change doesn't get the $event argument

如何解决您的需求?

只需将 item.selected 传递给您的 ng-change 函数并检查其值。

HTML

  <input type="checkbox" 
value="{{item.id}}"
ng-model="item.selected"
ng-change="updateTotal(item.selected)"> &nbsp; {{item.name}}

Controller

$scope.updateTotal = function(item_selected) {

if (item_selected) {
$scope.totalSelected++;
}
else {
$scope.totalSelected--;
}
}

已更新

你可以在这里测试它,在这个plnkr

关于javascript - AngularJS 复选框 ng-change 问题与 $event.target,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com