angularjs - 复选框中的 ng-change 被触发多次,因为 ng-click 超过了它

标签 angularjs stoppropagation angularjs-ng-change

由于代码比 1000 个单词更好,我创建了一个 plunker 来展示我的问题: http://bit.ly/1uiR2wy

考虑到特定的 DOM 元素,我有一个带有 ng-change 的输入复选框,我想向包裹它的 li 添加一个 ng-click 以便能够在整个区域中单击。 这个新的 ng-click 使 ng-change 中的方法发生两次。对于发生 3 次的 SPAN 描述 2 来说,情况更糟。

<li class="odd" ng-click="changeToggleModel($event)">
  <span class="overcomeDescription ellipsis-overflow">span description</span>
  <label>      
    <span>SPAN DESCRIPTION 2</span>
    <input type="checkbox" ng-change="toggleSelection($event)" ng-model="isSelected">
  </label>
</li>

我尝试过 stopPropagation ,但似乎并不能解决问题。 有什么想法吗? 如果您检查 plunker 并打开控制台,您将完美地看到问题。

先谢谢大家了

最佳答案

您需要在标签级别停止事件传播。试试这个:

<label ng-click="$event.stopPropagation()" ...>

演示:http://plnkr.co/edit/AjD9GlA3zjxABix6hegg?p=preview

发生这种情况的原因是标签(连接到相应的复选框)有点生成一个点击事件,以便将点击传递给输入。此点击事件会导致所描述的奇怪问题,因为它仍然像正常事件一样冒泡(好吧,它是正常事件),因此被 ngClick 指令检测到。

关于angularjs - 复选框中的 ng-change 被触发多次,因为 ng-click 超过了它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962634/

相关文章:

javascript - 如何从 firebase 获取所有待办事项?

javascript - 使用angular js隐藏/撤消列表

html - 如何隔离嵌套形式?

javascript - Angularjs 表达式未显示在 ngDialog 模板中

linux - Eclipse 是否允许立即停止 tomcat?

javascript - 固定 div 中的 div 是否捕获鼠标点击?

angularjs - 选中复选框 ng-change 第一次不会触发

prototypejs - Prototype.js事件观察点击拦截并停止传播

angularjs - 无法获取 AngularJs 中所选项目的索引

javascript - 在 AngularJS 中选择框更改时动态更新跨度内部 html