【问题标题】:How to trigger emulate click ngClick from jQuery如何从 jQuery 触发模拟单击 ngClick
【发布时间】:2020-08-29 07:26:50
【问题描述】:

怎么有这样的链接

<a href="" ng-click="someAction()">Some text</a>

我想从 jQuery 调用 ngClickaction:

$('a').click()

但它不起作用:someAction() 未调用。也没有成功

$('a').trigger('click')

是否可以从 jQuery 调用someAction()

【问题讨论】:

  • 我不确定我是否理解您,但您可以使用.trigger('click');.triggerHandler('click'); 触发点击
  • @AdrianPreuss, trigger('click') 也不起作用
  • 为什么需要从 jquery 调用函数,我建议使用 angular 方式本身。
  • @prash,功能测试的要求

标签: angularjs


【解决方案1】:

不要在意应用周期和超时,这里是:

$('a').dispatchEvent(new MouseEvent('click', {
 'view': window,
 'bubbles': true,
 'cancelable': true
}));

【讨论】:

  • 谢谢你的回答,但我需要在角度之外做,我不能改变源代码,只需要从 jquery 测试
  • 您可以从 javascript 控制台运行这些命令,因此您基本上处于 Angular 之外(angular 是 AngularJS 在窗口对象上公开的全局变量)
  • 我有一个错误Error: [$rootScope:inprog] $apply already in progress
  • 这意味着 Angular 应用程序已经处于 $digest 周期的中间。您是否在做任何其他导致 UI 更新的事情?
  • 我添加了一个更安全的应用
【解决方案2】:

我觉得它不起作用很奇怪,我可以同时使用两者

angular.element('a[ng-click="someAction()"]')

$('a[ng-click="someAction()"]')

作为选择器,click()trigger('click') 都可以触发点击处理程序。

http://plnkr.co/edit/6VMavwVImXAonSp8xZrI?p=preview (观看控制台)

【讨论】:

  • 太棒了。第一个帮助我解决了很多问题。
【解决方案3】:

是的,你可以,但你应该分配一个 id:

<a id='Button'>SOMETEXT</a>

$("#Button").click(function() {
   alert('clicked');
   someAction();
);

这应该可以解决它。

【讨论】:

    【解决方案4】:

    以旧方式为我工作 document.querySelector('a.btn.btn-info.showmore.ng-scope').click()

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 2014-04-22
      • 1970-01-01
      • 2011-12-08
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多