Tôi muốn kích hoạt ng-click
một phần tử trong thời gian chạy như:
_ele.click();
HOẶC LÀ
_ele.trigger('click', function());
Điều này có thể giải quyết như thế nào?
Tôi muốn kích hoạt ng-click
một phần tử trong thời gian chạy như:
_ele.click();
HOẶC LÀ
_ele.trigger('click', function());
Điều này có thể giải quyết như thế nào?
Câu trả lời:
Cú pháp như sau:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
Thông tin thêm về cách mở rộng Angular tại đây .
Nếu bạn đang sử dụng phiên bản cũ của angle , bạn nên sử dụng trigger thay vì triggerHandler .
Nếu cần áp dụng phương pháp ngừng truyền giống, bạn có thể sử dụng phương pháp này như sau:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
thay vìtrigger
angular.element(domElement).triggerHandler('click');
CHỈNH SỬA: Có vẻ như bạn phải thoát ra khỏi chu kỳ $ apply () hiện tại. Một cách để làm điều này là sử dụng $ timeout ():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
Xem fiddle: http://jsfiddle.net/t34z7/
$timeout
hơn setTimeout
là $timeout
nó sẽ chạy một $apply
chu trình cho bạn nếu cần thiết. Nó cũng làm cho mã của bạn dễ kiểm tra hơn vì ngMock cung cấp cho bạn toàn quyền kiểm soát khi $timeout
các s được thực thi. docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
để nó không gọi $ apply, phải không?
$timeout
là một dịch vụ và nhu cầu như vậy là phụ thuộc tiêm trước khi bạn có thể sử dụng nó docs.angularjs.org/api/ng/service/$timeout
Giải pháp sau đây phù hợp với tôi:
angular.element(document.querySelector('#myselector')).click();
thay vì :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
Đề phòng mọi người thấy vậy, tôi đã thêm câu trả lời trùng lặp bổ sung với một dòng quan trọng sẽ không phá vỡ sự truyền bá sự kiện
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
Giải pháp tốt nhất là sử dụng:
domElement.click()
Bởi vì các angular.element(domElement).triggerHandler('click')
sự kiện nhấp chuột anglejs triggerHandler ( ) không nổi lên trong phân cấp DOM, nhưng sự kiện ở trên thì có - giống như nhấp chuột bình thường.
https://docs.angularjs.org/api/ng/osystem/angular.element
http://api.jquery.com/triggerhandler/
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Bạn có thể làm như
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Mẫu đơn giản:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
Điều này làm là tìm kiếm nút id
và thực hiện hành động nhấp chuột. Thì đấy.
Nguồn: https://techiedan.com/angularjs-how-to-trigger-click/
Mã này sẽ không hoạt động (gây ra lỗi khi được nhấp vào):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
Bạn cần sử dụng querySelector như sau:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
Bao gồm dòng sau trong phương pháp của bạn ở đó bạn muốn kích hoạt sự kiện nhấp chuột
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});