AngularJS - 删除父元素的事件处理程序

时间:2013-10-22 21:18:48

标签: angularjs angularjs-ng-click

代码:

<table>
 <tr ng-click="function()">
  <td id="1"></td>
  <td></td>
 <tr>
</table>

如何从id = 1的td删除click-handler? 感谢

2 个答案:

答案 0 :(得分:1)

我将这意味着您不想在td id = 1中触发click事件处理程序,但您确实希望该行中的所有其他td仍然触发它。

ng-click连接普通的javascript事件处理程序。由于您正在侦听tr元素上的click事件,因此您只需要在事件触发子元素时停止传播,直到事件为止。

最好写成指令

app.directive('disableClick', function() {
  return function(scope, elem) {
    elem.on('click', function(e) {
      // e.stopPropagation(); or for IE, window.event.cancelBubble
      return false; // My assumption is that jqLite supports this, jQuery definitely does.
    });
  }
});

HTML

<td disable-click id="1"></td>

点击事件将不再冒泡到TR。

答案 1 :(得分:0)

正确的方法,这是一个指令。我发现它可以帮助你 在这里,您举个例子click no bubble

angular.forEach( 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter   mouseleave'.split(' '),
    function(name) {

        var directiveName = name.replace('my-' , '');

        app.directive( directiveName, ['$parse', function($parse) {
            return function(scope, element, attr) {
                var fn = $parse(attr[directiveName]);
                element.bind(lowercase(name), function(event) {
                event.stopPropagation();
                scope.$apply(function() {
                fn(scope, {$event:event});
            });
        });
    };
}]);

我希望它有所帮助