Saya ingin memicu ng-click
elemen saat runtime seperti:
_ele.click();
ATAU
_ele.trigger('click', function());
Bagaimana ini bisa dilakukan?
Saya ingin memicu ng-click
elemen saat runtime seperti:
_ele.click();
ATAU
_ele.trigger('click', function());
Bagaimana ini bisa dilakukan?
Jawaban:
Sintaksnya adalah sebagai berikut:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
Info lebih lanjut tentang Angular Extend caranya di sini .
Jika Anda menggunakan angular versi lama , Anda harus menggunakan trigger, bukan triggerHandler .
Jika Anda perlu menerapkan propagasi berhenti, Anda dapat menggunakan metode ini sebagai berikut:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
alih-alihtrigger
angular.element(domElement).triggerHandler('click');
EDIT: Tampaknya Anda harus keluar dari siklus $ apply () saat ini. Salah satu cara untuk melakukannya adalah dengan menggunakan $ timeout ():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
Lihat biola: http://jsfiddle.net/t34z7/
$timeout
daripada setTimeout
, karena $timeout
akan menjalankan $apply
siklus untuk Anda jika perlu. Itu juga membuat kode Anda lebih bisa diuji karena ngMock memberi Anda kendali penuh atas kapan $timeout
dijalankan. docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
agar tidak meminta $ apply, bukan?
$timeout
adalah layanan dan oleh karena itu perlu disuntikkan ketergantungan sebelum Anda dapat menggunakannya docs.angularjs.org/api/ng/service/$timeout
Solusi berikut ini berfungsi untuk saya:
angular.element(document.querySelector('#myselector')).click();
dari pada :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
Untuk berjaga-jaga jika semua orang melihatnya, saya menambahkan jawaban duplikat tambahan dengan baris penting yang tidak akan merusak propagasi acara
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
Menggunakan JavaScript lama biasa berhasil untuk saya:
document.querySelector('#elementName').click();
Solusi terbaik adalah dengan menggunakan:
domElement.click()
Karena angular.element(domElement).triggerHandler('click')
peristiwa klik angularjs triggerHandler ( ) tidak menggelembung dalam hierarki DOM, tetapi peristiwa di atas melakukannya - seperti klik mouse biasa.
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
Anda bisa melakukan seperti
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Sampel sederhana:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
Apa yang dilakukannya adalah mencari tombol id
dan melakukan tindakan klik. Voila.
Sumber: https://techiedan.com/angularjs-how-to-trigger-click/
Kode ini tidak akan berfungsi (menimbulkan kesalahan saat diklik):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Anda perlu menggunakan querySelector sebagai berikut:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
Sertakan baris berikut dalam metode Anda di sana Anda ingin memicu peristiwa klik
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});