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

Angularjs doesn't trigger event handled by addEventListener

本文关键字:addEventListener 处理 事件 Angularjs      更新时间:2023-09-26

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

在下面的代码中,当我单击"触发器"链接时,只有"第一个"打印到控制台。如何让它也打印"零"?

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 在内部使用 jqLite。如果在 Angular 之前加载 jQuery,它将使用 jQuery 而不是 jqLite。

triggerHandler仅触发由 jqLite/jQuery 添加的事件。

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

例如:

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

或:

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

如果您需要支持较旧的浏览器,可以从阅读此处开始。

相关文章:
  • 没有找到相关文章