Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以编程方式触发ngClick_Javascript_Jquery_Angularjs_Angularjs Ng Click - Fatal编程技术网

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);