只使用javascript和元素点击angularjs按钮

click angularjs button with javascript and element only

本文关键字:angularjs 按钮 元素 javascript      更新时间:2023-09-26

我正在开发一个浏览器扩展,可以自动单击页面上的按钮。这些代码可以在除了angularjs之外的所有站点上运行。

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

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

下面是applyButton没有注册"click"的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">

如果我只能访问文档,是否有最佳实践来单击按钮并从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()需要jQuery,并且没有被纳入AngularJS的jqLite,这是毫无价值的。

JSFiddle Link - demo