我希望在运行时触发一个元素的ng-click
,例如:
_ele.click();
_ele.trigger('click', function());
如何完成此操作?
我希望在运行时触发一个元素的ng-click
,例如:
_ele.click();
_ele.trigger('click', function());
如何完成此操作?
语法如下:
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
。 - yorchangular.element(domElement).triggerHandler('click');
编辑: 看起来你需要跳出当前的$apply()循环。一种方法是使用$timeout():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
请查看代码片段:http://jsfiddle.net/t34z7/
$timeout
而不是setTimeout
,因为$timeout
会在必要时运行$apply
周期。这还使您的代码更易于测试,因为ngMock让您完全控制何时执行$timeout
。https://docs.angularjs.org/api/ng/service/$timeout - WildlyInaccurate$timeout(fn, 0, false);
这样它就不会调用 $apply,是吗? - Martin Probst$timeout
是一个服务,因此在使用它之前需要进行依赖注入。参考文档:https://docs.angularjs.org/api/ng/service/$timeout - WildlyInaccurate以下解决方案对我有效:
angular.element(document.querySelector('#myselector')).click();
而不是:
angular.element('#myselector').triggerHandler('click');
$('#element').click()
呢? - Jhourlad Estrella以防万一每个人都能看到,我添加了一个额外的重复答案,并包含一条重要的语句,这不会破坏事件传播。
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
对我而言,使用纯JavaScript就可以实现:
document.querySelector('#elementName').click();
domElement.click()
angular.element(domElement).triggerHandler('click')
)点击事件不会在DOM层次结构中冒泡,但上面的一个事件与普通鼠标点击一样会冒泡。https://docs.angularjs.org/api/ng/function/angular.element
http://api.jquery.com/triggerhandler/
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
您可以像这样做
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
这段代码将无法运行(在点击时会抛出错误):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
HTML
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
id
并执行点击操作。完成了。在想要触发点击事件的方法中,包含以下行:
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});