当前位置: 首页 > 面试题库 >

带有$ event.target的AngularJS复选框ng-change问​​题

孟花蜂
2023-03-14
问题内容

我正在编写一个简单的AngularJS控制器,该控制器跟踪已选中复选框的数量。尝试避免$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>

控制器片段

$scope.updateTotal = function($event) {

    var checkbox = $event.target;

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

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

TypeError: Cannot read property 'target' of undefined

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

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

非常感谢你!


问题答案:

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

来自AngularJS官方github回购中的合作者:

ng-change不是用于处理change事件的指令(我知道给定名称会造成混淆),但实际上是在调用ngModelController。$
setViewValue()并更改值时得到通知(因为ng-change添加了一个侦听器)到$
viewChangeListeners集合中)。所以这是预期的。

您可以阅读更多有关ng-change的$
event参数的信息

您如何解决您的要求?

只需传递item.selected给ng-change函数并检查其值即可。

的HTML

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

控制者

$scope.updateTotal = function(item_selected) {

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

更新

您可以在此 plnkr中对其进行测试



 类似资料:
  • 问题内容: 我正在尝试以减轻痛苦的适当方式进行操作,但是我无法弄清楚如何处理ng-model并将其绑定到所选列表等,而且我需要在以后填充该列表并保留所选对象在里面。 每次填充列表时,我都必须覆盖类别,因为它将从服务器中拉出。 所以我想我需要数组,第二个数组将容纳所选对象? 如果我是对的,如何预选复选框? 我是否需要ng-click命令调用自定义函数才能将所选对象存储在另一个数组中? 我需要在复选框

  • 问题内容: 我需要将复选框添加到JTree。自定义TreeCellRenderer / TreeCellEditor似乎是正确的方法。到目前为止,我在此网页中使用了CheckBoxNodeRenderer方法。除了两件事,它可以正常工作: 复选框上方+下方有额外的空格;我想使其与常规JTree相同。 我想区分单击复选框本身(应尝试切换复选框)和单击与复选框相关联的文本(应允许事件侦听器将此解释为单

  • 问题内容: 是否可以将复选框代替“链接名称”? 如果是这样怎么办? 谢谢, 问题答案: 是的,当然有可能。您可以使用标准复选框: 然后在单独的javascript文件中使用jQuery订阅此复选框的change事件,并毫不客气地对其进行AJAXify:

  • 问题内容: 我正在尝试为Angular建立一个日托价格计算器。 公司专营权中的每个地点每天都有单独的价格。因此,我的想法是构建一个表单,首先选择一个允许您选择位置的表单,然后再选择一系列复选框。 我在从json文件中选择正确价格的复选框中遇到ng-true-value的问题。 更新: 添加了Plunkr:http : //plnkr.co/edit/MDmrqaH1VzLBzjd5eHgT?p=p

  • 问题内容: http://plnkr.co/edit/RP9SpO1qGjn5Ua6pZJ3D?p=preview js 和html 注意,根据半径范围结构检查了“ 2 Mile”无线电输入。为什么ng-change不触发功能? 如果我添加ng-model,则该函数会触发,但是ng-checked无法正常工作。 问题答案: 这是因为您没有使用: plnkr 更新: 很抱歉,我没有注意到您要检查默认

  • 问题内容: 我四处张望将事件添加到复选框,我本以为人们会用来设置更改事件,但是我发现人们正在使用 是否有一个原因?它们都可以与单击的事件和键盘更改一起正常工作。我想念什么吗? 问题答案: 在IE中,仅当复选框失去焦点时才会触发。因此,如果按Tab键,则按几次空格键,然后跳出,则只会收到一个事件,但会收到多个事件。 注意:这是在IE行为正确(根据规范)且其他浏览器错误的情况下,非常非常非常少的情况之