मैं ng-click
रनटाइम पर एक तत्व को ट्रिगर करना चाहता हूं जैसे:
_ele.click();
या
_ele.trigger('click', function());
यह कैसे किया जा सकता है?
मैं ng-click
रनटाइम पर एक तत्व को ट्रिगर करना चाहता हूं जैसे:
_ele.click();
या
_ele.trigger('click', function());
यह कैसे किया जा सकता है?
जवाबों:
वाक्य रचना निम्नलिखित है:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
कोणीय विस्तार पर अधिक जानकारी यहाँ रास्ता ।
यदि आप कोणीय के पुराने संस्करणों का उपयोग कर रहे हैं , तो आपको ट्रिगरहैंडलर के बजाय ट्रिगर का उपयोग करना चाहिए ।
यदि आपको स्टॉप प्रचार लागू करने की आवश्यकता है, तो आप इस विधि का उपयोग इस प्रकार कर सकते हैं:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
इसके बजाय का उपयोग करना होगाtrigger
angular.element(domElement).triggerHandler('click');
संपादित करें: ऐसा प्रतीत होता है कि आपको वर्तमान $ लागू () चक्र से बाहर निकलना होगा। ऐसा करने का एक तरीका $ टाइमआउट () है:
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
फिडल देखें: http://jsfiddle.net/t34z7/
$timeout
इसके बजाय कोणीय का उपयोग करना चाहते हैं setTimeout
, यदि आवश्यक हो तो आपके लिए $timeout
एक $apply
चक्र चलाएगा । यह आपके कोड को और अधिक परीक्षण योग्य बनाता है क्योंकि ngMock आपको पूर्ण नियंत्रण देता है जब $timeout
s निष्पादित होते हैं। docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
ताकि यह $ लागू न हो, न हो?
$timeout
एक सेवा है और इससे पहले कि आप इसे docs.angularjs.org/api/ng/service/$timeout
यह समाधान मेरे लिए काम करता है:
angular.element(document.querySelector('#myselector')).click();
के बजाय :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
बस अगर हर कोई इसे देखता है, तो मैंने एक महत्वपूर्ण लाइन के साथ अतिरिक्त डुप्लिकेटिंग उत्तर जोड़ा, जो घटना के प्रसार को नहीं तोड़ देगा
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
उपयोग करने के लिए सबसे अच्छा समाधान है:
domElement.click()
क्योंकि कोणीयज ट्रिगरहैंडलर ( angular.element(domElement).triggerHandler('click')
) क्लिक की घटनाओं डोम पदानुक्रम में बबल नहीं करता है, लेकिन ऊपर वाला करता है - एक सामान्य माउस क्लिक की तरह।
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
सरल नमूना:
एचटीएमएल
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
जावास्क्रिप्ट
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
यह क्या करता है बटन के लिए देखो id
और एक क्लिक कार्रवाई करते हैं। देखा।
स्रोत: https://techiedan.com/angularjs-how-to-trigger-click/
यह कोड काम नहीं करेगा (क्लिक करने पर कोई त्रुटि फेंकें):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
आपको निम्न के रूप में querySelector का उपयोग करने की आवश्यकता है:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
अपनी विधि में निम्नलिखित पंक्ति शामिल करें, जहाँ आप क्लिक इवेंट को ट्रिगर करना चाहते हैं
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});