Çalışma ng-click
zamanında aşağıdaki gibi bir öğeyi tetiklemek istiyorum:
_ele.click();
VEYA
_ele.trigger('click', function());
Bu nasıl yapılabilir?
Çalışma ng-click
zamanında aşağıdaki gibi bir öğeyi tetiklemek istiyorum:
_ele.click();
VEYA
_ele.trigger('click', function());
Bu nasıl yapılabilir?
Yanıtlar:
Sözdizimi aşağıdaki gibidir:
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 yolu hakkında daha fazla bilgiyi burada bulabilirsiniz .
Eğer kullanıyorsanız açısal eski sürümlerini kullanmak gerekir tetiği yerine triggerHandler .
Durdurma yayılımı uygulamanız gerekiyorsa, bu yöntemi aşağıdaki gibi kullanabilirsiniz:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
bunun yerinetrigger
angular.element(domElement).triggerHandler('click');
DÜZENLEME: Görünüşe göre mevcut $ apply () döngüsünden çıkmanız gerekiyor. Bunu yapmanın bir yolu $ timeout () kullanmaktır:
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
Fiddle'a bakın: http://jsfiddle.net/t34z7/
$timeout
ziyade setTimeout
gibi $timeout
bir çalışacak $apply
gerekirse sizin için döngüsünü. Ayrıca, ngMock size $timeout
s çalıştırıldığında tam kontrol sağladığından kodunuzu daha test edilebilir hale getirir . docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
$ apply'ı çağırmayacak şekilde olmalı, değil mi?
$timeout
bir hizmettir ve bu nedenle
Aşağıdaki çözüm benim için çalışıyor:
angular.element(document.querySelector('#myselector')).click();
onun yerine :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
Herkesin görmesi durumunda, olay yayılımını bozmayacak önemli bir satırla ek yinelenen yanıt ekledim
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
En iyi çözüm şunları kullanmaktır:
domElement.click()
Çünkü angularjs triggerHandler ( angular.element(domElement).triggerHandler('click')
) click olayları DOM hiyerarşisinde kabarcık oluşturmaz, ancak yukarıdakiler tıpkı normal bir fare tıklaması gibi.
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
Beğenebilirsin
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Basit örnek:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
Bunun yaptığı, düğmeyi aramak id
ve bir tıklama eylemi gerçekleştirmektir. Voila.
Kaynak: https://techiedan.com/angularjs-how-to-trigger-click/
Bu kod çalışmayacaktır (tıklandığında bir hata verin):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
QuerySelector'ı aşağıdaki gibi kullanmanız gerekir :
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
Tıklama olayını tetiklemek istediğinizde aşağıdaki satırı yönteminize ekleyin
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});