javascript - Angularjs 不会触发由 addEventListener 处理的事件

标签 javascript html angularjs

我正在尝试在 <A> 上触发事件带有 mousedown 的元素由 addEventListener 处理的事件打电话,但我不知道为什么它不起作用。
我尝试使用 angular.element(el).triggerHandler('click');但它只会触发通过 ng-click 指定的事件处理程序.

在下面的代码中,当我单击“触发”链接时,只有“first”被打印到控制台。我如何让它也打印“零”?

JSBin link

HTML:

<a id='zero' href="#">zero</a><br/>
<a id="first" href="" ng-click="firstLinkClick()">first</a>
</br>
<a id="trigger" href="" ng-click="triggerLinkClick()">trigger</a>

Javascript:

document.getElementById('zero').addEventListener('click', function() {
  console.log('zero');
}, false);

app.controller('myCtrl', function myCtrl($timeout, $scope) {
  $scope.firstLinkClick = function() {
    console.log('first');
  };

  $scope.triggerLinkClick = function() {
    $timeout(function() {
      var el = document.getElementById('zero');
      angular.element(el).triggerHandler('click');
    }, 100);

    $timeout(function() {
      var el = document.getElementById('first');
      angular.element(el).triggerHandler('click');
    }, 100);
  };
});

最佳答案

Angular 内部使用 jqLit​​e。如果您在 Angular 之前加载 jQuery,它将使用 jQuery 而不是 jqLit​​e。

triggerHandler 仅触发由 jqLit​​e/jQuery 添加的事件。

要触发由 addEventListener 添加的事件,您需要使用标准 API。

例如:

var el = document.getElementById('zero');
el.click();

或者:

var el = document.getElementById('zero');
el.dispatchEvent(new Event('click'));

如果您需要支持旧版浏览器,您可以先阅读 here .

关于javascript - Angularjs 不会触发由 addEventListener 处理的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804800/

相关文章:

java - 避免在 servlet 中使用 html

javascript - $broadcast 不从服务中触发 (AngularJS)

javascript - 仅获取数据层中数组的第一个值

javascript - 在 MVC Javascript 函数中,使用 Ajax.ActionLink 不会触发

javascript - 模块导出中的 NodeJS 多个函数

html - 如何使垂直导航栏中的选项卡居中?

javascript - XHR 不适合聊天应用程序?

javascript - 使用javascript更改div颜色

javascript - Angular JS ng-repeat 不显示选项

javascript - 需要AngularJS/Javascript三元运算符代码解释