8 ответов:
синтаксис следующий:
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.
Если вам нужно применить остановить распространение вы можете использовать этот метод следующим образом:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();"> Something </a>
angular.element(domElement).triggerHandler('click');EDIT: Похоже, что вам нужно выйти из текущего цикла $apply (). Один из способов сделать это-использовать $timeout ():
$timeout(function() { angular.element(domElement).triggerHandler('click'); }, 0);см скрипка:http://jsfiddle.net/t34z7/
Это следующее решение работает для меня :
angular.element(document.querySelector('#myselector')).click();вместо :
angular.element('#myselector').triggerHandler('click');
на всякий случай, если все это видят, я добавил дополнительный дублирующий ответ с важной строкой, которая не будет нарушать распространение событий
$scope.clickOnUpload = function ($event) { $event.stopPropagation(); // <-- this is important $timeout(function() { angular.element(domElement).trigger('click'); }, 0); };
используя простой старый JavaScript работал для меня:
document.querySelector('#elementName').click();
лучшее решение-использовать:
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
этот код не будет работать (выдавать ошибку при нажатии):
$timeout(function() { angular.element('#btn2').triggerHandler('click'); });вы должны использовать querySelector следующим образом:
$timeout(function() { angular.element(document.querySelector('#btn2')).triggerHandler('click'); });
Comments