javascript – 为什么AngularJS中的$event.preventDefault()不会阻止上下文菜单出现?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么AngularJS中的$event.preventDefault()不会阻止上下文菜单出现?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
就像标题所说,我不确定为什么$event.preventDefault()不会阻止右键单击出现上下文菜单.

我用plunker写了this simple example来证明这个问题.

HTML:

<body ng-controller="MainCtrl">
    <div id="me" ng-mousedown="stopContext($event)">CLICK ME {{num}}</div>
</body>

使用Javascript:

$scope.stopContext = function(ev) {
    $scope.num += 1;
    ev.preventDefault();
  };

提前致谢.

解决方法

为了防止上下文菜单,您需要捕获(并阻止) contextmenu事件.

不幸的是,Angular没有针对此事件的指令,因此您必须自己创建一个.

从Angular的源代码(版本1.2.16)“复制”:

app.directive('myContextmenu',function ($parse) {
  return {
    compile: function (tElem,tAttrs) {
      var fn = $parse(tAttrs.myContextmenu);

      return function (scope,elem) {
        elem.on('contextmenu',onContextmenu);

        function onContextmenu(evt) {
          scope.$apply(function () {
            fn(scope,{$event: evt});
          });
        });
      };
    }
  };
});

然后,您可以像这样使用它:

<div id="me" my-contextmenu="stopContext($event)">CLICK ME {{num}}</div>

另见,这是short demo.测试了最新版本的Chrome,Firefox和Safari,并找到了工作.

猜你在找的JavaScript相关文章