Javascript 如何以编程方式触发ngClick
我想在运行时触发元素的Javascript 如何以编程方式触发ngClick,javascript,jquery,angularjs,angularjs-ng-click,Javascript,Jquery,Angularjs,Angularjs Ng Click,我想在运行时触发元素的ng单击,如: _ele.click(); 或 如何做到这一点 angular.element(domElement).triggerHandler('click'); 编辑: 似乎您必须打破当前的$apply()循环。一种方法是使用$timeout(): 看小提琴:你可以像这样做 $timeout(function() { angular.element('#btn2').triggerHandler('click'); }); 语法如下所示: functio
ng单击
,如:
_ele.click();
或
如何做到这一点
angular.element(domElement).triggerHandler('click');
编辑:
似乎您必须打破当前的$apply()循环。一种方法是使用$timeout():
看小提琴:你可以像这样做
$timeout(function() {
angular.element('#btn2').triggerHandler('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,则应使用trigger而不是triggerHandler
如果需要应用停止传播,可以按如下方式使用此方法:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
某物
为了防止每个人都看到它,我添加了额外的重复答案,并添加了一条重要的行,这不会中断事件传播
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
$scope.clickOnUpload=函数($event){
$event.stopPropagation();//以下解决方案适合我:
angular.element(document.querySelector('#myselector')).click();
而不是:
angular.element('#myselector').triggerHandler('click');
最好的解决方案是使用:
domElement.click()
因为angularjs triggerHandler(angular.element(doElement).triggerHandler('click')
)单击事件不会在DOM层次结构中出现,但上面的事件会出现,就像普通的鼠标单击一样
使用普通的旧JavaScript对我来说很有效:
document.querySelector(“#elementName”)。单击();
此代码将不起作用(单击时引发错误):
您需要使用查询选择器,如下所示:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
在要触发单击事件的方法中包括以下行
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});
简单示例:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
这样做的目的是查找按钮的id
并执行单击操作。瞧
来源:否,我想知道手动触发ng click的机制。即使这不起作用,它也会抛出以下错误:[$rootScope:inprog]at error(native)您可能希望使用Angular的$timeout
而不是setTimeout
,因为$timeout
将在必要时为您运行$apply
循环。它还使您的代码更易于测试,因为ngMock让您完全控制执行$timeout
的时间。实际上这应该是$timeout(fn,0,false);
这样它就不会调用$apply了,不是吗?这应该是公认的答案。triggerHandler可以工作。trigger在v1.2中不起作用。25@deadManN$timeout
是一项服务,因此在使用它之前需要注入依赖项。您使用的angular版本是什么。triggerHandler在1.2.1中似乎工作正常:请解释为什么$(elem).click()不能与Angular一起使用?如果您仅限于jqLite并且不能使用选择器,请改为:Angular.element(document.querySelector('#mySelector')).trigger('click');@DanielNalbach在当前(而不是当前)中angularjs 1.2+版本,您必须使用triggerHandler
而不是trigger
我不太确定这是否仍然有效…angularjs 1.6这似乎无法完全使用jquery@DotKu可能您已经在$scope函数中,就像在$timeout函数中使用时一样?换句话说,您不能调用$scope。$apply()在$scope中。$apply()…我希望这可能会对您有所帮助。@jpmottin我找到它,它必须放在$timeout中。ThanksOMG,我没有破坏它。为什么他们不能模仿jQuery的$('#元素')。click()
谢谢!这终于在1.5.11中对我起作用了,并且完全依赖jQuery。$timeout(function(){var el=document.getElementsByClassName('fa-chevron-up');angular.element(el.trigger('click');},0);是的。对我有效。谢谢。我在我的ng 1.5.3应用程序中遇到此解决方案错误:jqLite不支持通过选择器查找元素。
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);