次のng-click
ような実行時に要素をトリガーしたい:
_ele.click();
または
_ele.trigger('click', function());
これはどのように行うことができますか?
次のng-click
ような実行時に要素をトリガーしたい:
_ele.click();
または
_ele.trigger('click', function());
これはどのように行うことができますか?
回答:
構文は次のとおりです。
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 Extend wayの詳細については、こちらをご覧ください。
angularの古いバージョンを使用している場合は、triggerHandlerの代わりにtriggerを使用する必要があります。
伝播停止を適用する必要がある場合は、このメソッドを次のように使用できます。
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
代わりに使用する必要があるtrigger
angular.element(domElement).triggerHandler('click');
編集: あなたは現在の$ apply()サイクルから抜け出す必要があるようです。これを行う1つの方法は、$ timeout()を使用することです。
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
フィドルを参照してください:http : //jsfiddle.net/t34z7/
$timeout
のでsetTimeout
、おそらくでなくAngularを使用したいと思うでしょう。また、ngMockはsがいつ実行されるかを完全に制御できるため、コードをよりテストしやすくします。docs.angularjs.org/api/ng/service/$timeout$timeout
$apply
$timeout
$timeout(fn, 0, false);
$ applyを呼び出さないようにする必要がありますね。
$timeout
はサービスなので、使用する前に依存関係を挿入する必要があります。docs.angularjs.org
次の解決策は私にとってはうまくいきます:
angular.element(document.querySelector('#myselector')).click();
の代わりに :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
万が一それを見た場合に備えて、イベントの伝播を中断しない重要な行を追加して重複する回答を追加しました
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
最善の解決策は以下を使用することです:
domElement.click()
angularjs triggerHandler(angular.element(domElement).triggerHandler('click')
)クリックイベントはDOM階層で浮上しないためですが、上記のものは通常のマウスクリックと同じように浮上します。
https://docs.angularjs.org/api/ng/function/angular.element
http://api.jquery.com/triggerhandler/
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
簡単なサンプル:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
これは、ボタンを探しid
てクリックアクションを実行することです。出来上がり。
このコードは機能しません(クリックするとエラーが発生します):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
次のようにquerySelectorを使用する必要があります。
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});