【发布时间】:2014-04-22 05:53:35
【问题描述】:
我想在运行时触发一个元素的ng-click,例如:
_ele.click();
或
_ele.trigger('click', function());
如何做到这一点?
【问题讨论】:
-
不,我想知道手动触发ng-click的机制。
标签: javascript jquery angularjs angularjs-ng-click
我想在运行时触发一个元素的ng-click,例如:
_ele.click();
或
_ele.trigger('click', function());
如何做到这一点?
【问题讨论】:
标签: javascript jquery angularjs angularjs-ng-click
语法如下:
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 扩展方式 here.
如果您使用的是旧版本的 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);
【讨论】:
$timeout 而不是 setTimeout,因为 $timeout 将在必要时为您运行 $apply 循环。它还使您的代码更具可测试性,因为 ngMock 让您可以完全控制何时执行 $timeouts。 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);
};
【讨论】:
使用普通的旧 JavaScript 对我有用:document.querySelector('#elementName').click();
【讨论】:
最好的解决办法是使用:
domElement.click()
因为 angularjs triggerHandler(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');
});
您需要按如下方式使用querySelector:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('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 并执行点击操作。瞧。
【讨论】:
在您要触发点击事件的方法中包含以下行
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});
【讨论】: