Answers:
语法如下:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
有关Angular Extend方式的更多信息,请点击此处。
如果使用的是旧版本的angular,则应使用trigger而不是triggerHandler。
如果需要应用停止传播,则可以按以下方式使用此方法:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
而不是trigger
angular.element(domElement).triggerHandler('click');
编辑: 似乎您必须打破当前的$ apply()周期。一种方法是使用$ timeout():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
参见小提琴:http://jsfiddle.net/t34z7/
$timeout
而不是setTimeout
,因为如有必要,$timeout
它将$apply
为您运行一个循环。ngMock使您可以完全控制$timeout
执行s的时间,这也使您的代码更具可测试性。docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
这样,它才不会调用$ apply,不是吗?
$timeout
是一项服务,因此需要先注入依赖项,然后才能使用它docs.angularjs.org/api/ng/service/$timeout
以下解决方案对我有用:
angular.element(document.querySelector('#myselector')).click();
代替 :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
以防万一大家看到的是,我添加了一个重要的行,它不会破坏事件传播,它附加了重复的答案
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
最好的解决方案是使用:
domElement.click()
因为angularjs triggerHandler(angular.element(domElement).triggerHandler('click')
)click事件不会在DOM层次结构中冒泡,但是上面的事件却会发生-就像普通的鼠标单击一样。
https://docs.angularjs.org/api/ng/function/angular.element
http://api.jquery.com/triggerhandler/
https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/click
简单样本:
的HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
的JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
这是在寻找按钮id
并执行单击操作。瞧
资料来源:https : //techiedan.com/angularjs-how-to-trigger-click/
在要触发点击事件的方法中包括以下行
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});