it-swarm.com.de

Wie wird ngClick programmgesteuert ausgelöst?

Ich möchte ng-click eines Elements zur Laufzeit auslösen:

_ele.click();

OR

_ele.trigger('click', function());

Wie kann das gemacht werden?

93
mulla.azzi

Die Syntax lautet wie folgt:

function clickOnUpload() {
  $timeout(function() {
    angular.element('#myselector').triggerHandler('click');
  });
};

// Using Angular Extend
angular.extend($scope, {
  clickOnUpload: clickOnUpload
});

// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;

Mehr Infos zu Angular Extend Weg hier .

Wenn Sie alte Versionen von angle verwenden, sollten Sie trigger anstelle von triggerHandler verwenden.

Wenn Sie die Weitergabe unterbrechen müssen, können Sie diese Methode wie folgt verwenden:

<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
  Something
</a>
173
clopez
angular.element(domElement).triggerHandler('click');

EDIT: Es scheint, dass Sie den aktuellen $ apply () - Zyklus verlassen müssen. Eine Möglichkeit, dies zu tun, ist $ timeout ():

$timeout(function() {
    angular.element(domElement).triggerHandler('click');
}, 0);

Siehe Geige: http://jsfiddle.net/t34z7/

81
Blago

Diese Lösung funktioniert für mich: 

angular.element(document.querySelector('#myselector')).click();

anstatt :

angular.element('#myselector').triggerHandler('click');
17
jpmottin

Nur für den Fall, dass jeder es sieht, fügte ich eine zusätzliche doppelte Antwort hinzu, mit einer wichtigen Zeile, die die Weitergabe von Ereignissen nicht bricht

$scope.clickOnUpload = function ($event) {    
    $event.stopPropagation(); // <-- this is important

    $timeout(function() {
        angular.element(domElement).trigger('click');
    }, 0);
};
12
Ulterior

Die Verwendung von einfachem altem JavaScript hat bei mir funktioniert:
document.querySelector('#elementName').click();

8
charlchad

Das kannst du gerne machen

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});
5
Fizer Khan

Die beste Lösung ist zu verwenden:

domElement.click()

Da die clickj-Ereignisse von anglejs triggerHandler (angular.element(domElement).triggerHandler('click')) nicht in der DOM-Hierarchie aufplatzen, sondern die oben genannten, genau wie bei einem normalen Mausklick.

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

4

Einfache probe:

HTML

<div id='player'>
    <div id="my-button" ng-click="someFuntion()">Someone</div>
</div>

JavaScript

$timeout(function() {
    angular.element('#my-button').triggerHandler('click');
}, 0);

Suchen Sie dazu nach dem id der Schaltfläche und führen Sie eine Klickaktion aus. Voila.

Quelle: https://techiedan.com/angularjs-how-to-trigger-click/

1

Fügen Sie die folgende Zeile in Ihre Methode ein, die das Klickereignis auslösen soll

angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});
0

Dieser Code funktioniert nicht (werfen Sie einen Fehler, wenn Sie darauf klicken):

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});

Sie müssen den querySelector wie folgt verwenden:

$timeout(function() {
   angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
0