javascript - AngularJS - 多次 ng-click - 事件冒泡

标签 javascript angularjs dom-events angularjs-ng-repeat angularjs-ng-click

在以下示例中:

  <li ng-repeat="item in items" ng-click="showItem(item)">
    <h3>{{item.title}}</h3>
    <button ng-click="remove(item)">Remove</button>
  </li>

当我单击按钮时,由于事件冒泡,也会调用 showItem() 。 我知道我可以使用 $event 来监视 $event.currentTarget 并执行 $event.stopPropagation() 等,但这非常丑陋。

顺便说一句。我不想停止 button 上的传播(在我的例子中,button 是一个 twitter bootstrap dopdown/button - 这只是一个例子)

当我点击remove按钮时,如何阻止showItem()被调用?

编辑 丑陋的解决办法是:

function remove(item,$event){
  $event.originalEvent.prevent = true;
  // rest of the code
}

function showItem(item,$event){
  if($event.originalEvent.prevent)return;
  // rest of the code
}

最佳答案

这个解决方案对我有用(我只支持最新的浏览器,所以我尝试修改代码以使其更加兼容):

HTML:

<li ng-repeat="item in items" ng-click="showItem(item)">
    <h3>{{item.title}}</h3>
    <button ng-click="remove(item, $event)">Remove</button>
</li>

脚本:

function remove(item, $event) {
    // do some code here

    // Prevent bubbling to showItem.
    // On recent browsers, only $event.stopPropagation() is needed
    if ($event.stopPropagation) $event.stopPropagation();
    if ($event.preventDefault) $event.preventDefault();
    $event.cancelBubble = true;
    $event.returnValue = false;
}
function showItem(item) {
    // code here
}

编辑 - 添加了一个 JSFiddle 演示来尝试一下 http://jsfiddle.net/24e7mapp/1/

关于javascript - AngularJS - 多次 ng-click - 事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701092/

相关文章:

javascript - 我是否需要多个音频元素的多个事件监听器 - JavaScript?

拖动期间释放鼠标时忽略 JavaScript mouseUp 事件

javascript - Meteor 删除对象数组中的重复属性

javascript - jQuery timepicker 不能在模态中工作

javascript - Angular -recaptcha : Change language with site language change

javascript - 将矩形响应转换为模型对象

javascript - 在 html5 中的 fabric.js Canvas 上一次删除多个对象

java - Blackberry 支持哪些编程语言?

javascript - 当用户从页面底部滚动 100px 时附加 div

javascript - Raphael.js,如何选择一个元素?