Voglio attivare ng-click
un elemento in fase di esecuzione come:
_ele.click();
O
_ele.trigger('click', function());
Come si può fare?
Voglio attivare ng-click
un elemento in fase di esecuzione come:
_ele.click();
O
_ele.trigger('click', function());
Come si può fare?
Risposte:
La sintassi è la seguente:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
Maggiori informazioni su Angular Extend qui .
Se stai usando vecchie versioni di angular , dovresti usare trigger invece di triggerHandler .
Se è necessario applicare l'arresto della propagazione, è possibile utilizzare questo metodo come segue:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
posto ditrigger
angular.element(domElement).triggerHandler('click');
EDIT: Sembra che tu debba uscire dall'attuale ciclo $ apply (). Un modo per farlo è usare $ timeout ():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
Vedi violino: http://jsfiddle.net/t34z7/
$timeout
piuttosto che setTimeout
, poiché $timeout
eseguirà un $apply
ciclo per te se necessario. Inoltre rende il tuo codice più testabile poiché ngMock ti dà il pieno controllo su quando $timeout
vengono eseguiti i messaggi di posta elettronica . docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
così che non invoca $ apply, no?
$timeout
è un servizio e come tale deve essere iniettato in dipendenza prima di poterlo utilizzare docs.angularjs.org/api/ng/service/$timeout
La seguente soluzione funziona per me:
angular.element(document.querySelector('#myselector')).click();
invece di :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
Nel caso in cui tutti lo vedano, ho aggiunto un'ulteriore risposta di duplicazione con una riga importante che non interromperà la propagazione dell'evento
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
La soluzione migliore è utilizzare:
domElement.click()
Perché gli angular.element(domElement).triggerHandler('click')
eventi di clic angularjs triggerHandler ( ) non si manifestano nella gerarchia DOM, ma quello sopra sì, proprio come un normale clic del mouse.
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
Puoi fare mi piace
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Esempio semplice:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
Ciò che fa è cercare i pulsanti id
ed eseguire un'azione di clic. Ecco.
Fonte: https://techiedan.com/angularjs-how-to-trigger-click/
Questo codice non funzionerà (genera un errore quando si fa clic):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
È necessario utilizzare querySelector come segue:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
Includere la seguente riga nel metodo in cui si desidera attivare l'evento clic
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});