javascript - 仅使用 javascript 和元素单击 angularjs 按钮

标签 javascript jquery html angularjs click

我正在开发一个浏览器扩展程序,它可以自动点击页面上的按钮。该代码适用于除 angularjs 之外的所有站点。

下面的代码是我尝试点击一个 angularjs 按钮并让它注册点击,但它不起作用。

//applyButton is the button element.
if(angular) {
     var e = angular.element(applyButton);
     e.trigger('click');
     e.scope().$apply();
 } else {
     applyButton.click();
 }

这是未注册“点击”的 applyButton 的 Angular html 代码

<input value="Apply" class="apply button gift-card-apply" data-ng-click="!orderSubmitErrors.giftCard.sectionHasErrors &amp;&amp; applyGiftCard($event)" client-validation="onSubmit,giftCard,validateSubsection" type="button">

如果我只能访问这些项目的 document.element,是否有单击按钮并从 javascript 更改 angularjs 的输入字段的最佳实践?

最佳答案

看来您需要将元素包装在 $timeout 中在您的元素上调用 .click。观察以下简化示例...

<div ng-app="app" ng-controller="ctrl">
    <button id="btn" ng-click="click()">click</button>
</div>

var app = angular.module('app', []).controller('ctrl', function($scope, $timeout) {
    $scope.click = function() {
        console.log('click');
    }

    $timeout(function() {
        angular.element(document.getElementById('btn')).trigger('click')
    });

    //does not work
    angular.element(document.getElementById('btn')).trigger('click')
});

有了这个,您将不需要调用 e.scope().$apply(); - $timeout 将在必要时调用一个循环。此外,虽然您没有在示例中指定,但 .trigger() 毫无值(value)需要 jQuery,并且没有融入 AngularJS 的 jqLit​​e。

JSFiddle Link - 演示

关于javascript - 仅使用 javascript 和元素单击 angularjs 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574416/

相关文章:

javascript - 如何获得 jQuery 可排序列表顺序?

javascript - PhoneGap 外部主机通配符

javascript - Jquery:如何使图形元素可折叠?

html - Flex Box 和媒体查询

jquery - 使用 jQuery、scrollTop 和 #anchors 锁定奇怪的浏览器窗口

html - 我可以在不使用 JavaScript 的情况下在将鼠标悬停在元素上时更改图像吗?

javascript - SVG 不在 safari 上绘制

javascript - 抓取——使用 PyQt4 从 JS 生成的页面中缺少 <dt> 标记的文本元素

javascript - 如何在 javascript 的单个循环中转换多个 if?

javascript - $(.class).eq().append 在工作两次后附加到错误的类