jquery - 如何检测 Angular 中是否*未*单击指令元素

标签 jquery angularjs angularjs-directive angularjs-scope angular-ui

我正在尝试为按钮和弹出窗口等多个指令实现“取消选择”功能。也就是说,我希望当用户单击不属于指令模板一部分的元素时触发我的函数。目前,我正在使用以下 JQuery 代码:

$('body').click(function(evt){
  if($(evt.target).closest($('#directive1')).length == 0 ){
    //deselects first directive
  }

  if($(evt.target).closest($('#directive2')).length == 0 ){
    //deselects second directive
  }

})

有更好的方法在 Angular 上做到这一点吗?

最佳答案

一个简单的指令,用于检测元素外部的点击(没有 jQuery):

http://jsbin.com/wimeyoruxo/2/edit

app.directive('onDeselect', [ '$document', function($document) {

  return {
    scope: { onDeselect: '&' },
    link: function(scope, element, attrs) {

      var clickHandler = function(e) {

        // Check if the target is our element or it's descendants
        var target = e.target;
        while (target) {
          if (element[0] === target) return;
          target = target.parentElement;
        }

        // trigger the function
        scope.$apply(function() {
          scope.onDeselect({$event:e});
        });
      };

      $document.on('click', clickHandler);

      // clean handler on destroy
      scope.$on('$destroy', function() {
        $document.off('click', clickHandler);
      });
    }
  };
}]);

像这样使用它:

<div on-deselect="doSomething($event)"></div>

关于jquery - 如何检测 Angular 中是否*未*单击指令元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26966600/

相关文章:

javascript - 将整个表格置于其外部 div 的中心

javascript - Angular JS : Translating static html pages with a lot of text

javascript - 为什么我的输入焦点指令不再起作用?

css - 单击单选按钮后如何应用 ng-class(css 属性)?

javascript - ng-repeat 在指令内部没有应用指令函数

javascript - 独立指令绑定(bind)到父函数

javascript - FireFox - 隐藏 DIV 后切换焦点?

jquery - 使用 KnockoutJS 映射插件和 MVC 3 创建基本网格

除第一行/最后一行/列之外的表格单元格的 JQuery 选择器

python - 具有一对一关系的 SQLAlchemy 聚合